<?php
// api/clients_api.php
header('Content-Type: application/json');
session_start();
require_once '../includes/db.php';

// Verifica login
if (!isset($_SESSION['logged_in_fxtream'])) { 
    die(json_encode(['status'=>false, 'msg'=>'Acesso negado'])); 
}

$action = $_POST['action'] ?? $_GET['action'] ?? '';
$admin_id = $_SESSION['user_id'];

// Configurações Globais
$server_url = "http://".$_SERVER['HTTP_HOST'];
$confianca_dias = 3; 

try {
    $c = $pdo->query("SELECT dominio_url, confianca_dias FROM configuracoes LIMIT 1")->fetch(PDO::FETCH_ASSOC);
    if($c && !empty($c['dominio_url'])) {
        $server_url = rtrim(trim($c['dominio_url']), "/");
        if (!preg_match("~^(?:f|ht)tps?://~i", $server_url)) $server_url = "http://" . $server_url;
    }
    if(isset($c['confianca_dias'])) $confianca_dias = intval($c['confianca_dias']);
} catch(Exception $e){}

switch($action) {

    // === SALVAR NOVO ===
    case 'save':
        $user = trim($_POST['username']);
        $pass = trim($_POST['password']);
        $duration = intval($_POST['duration']);
        $is_trial = intval($_POST['is_trial']);
        $notes = $_POST['notes'] ?? '';
        $max_conn = intval($_POST['max_connections'] ?? 1);

        if(empty($user) || empty($pass)) { echo json_encode(['status'=>false, 'msg'=>'Preencha todos os campos']); exit; }

        $chk = $pdo->prepare("SELECT id FROM users WHERE username = ?");
        $chk->execute([$user]);
        if($chk->rowCount() > 0){ echo json_encode(['status'=>false, 'msg'=>'Usuário já existe']); exit; }

        if($is_trial == 1) {
            $exp = date('Y-m-d H:i:s', strtotime("+$duration hours"));
        } else {
            $exp = date('Y-m-d H:i:s', strtotime("+$duration months"));
        }

        $sql = "INSERT INTO users (username, password, revendedor_id, expire_date, active, is_trial, notes, bouquets, max_connections) 
                VALUES (?, ?, ?, ?, 1, ?, ?, '[]', ?)";
        $stmt = $pdo->prepare($sql);
        
        if($stmt->execute([$user, $pass, $admin_id, $exp, $is_trial, $notes, $max_conn])) {
            echo json_encode([
                'status' => true, 
                'msg' => ($is_trial ? 'Teste gerado!' : 'Cliente criado!'),
                'data' => [
                    'username' => $user,
                    'password' => $pass,
                    'expire_view' => date('d/m/Y H:i', strtotime($exp)),
                    'server_url' => $server_url
                ]
            ]);
        } else {
            echo json_encode(['status'=>false, 'msg'=>'Erro ao gravar no banco']);
        }
    break;

    // === ATUALIZAR (EDITAR) ===
    case 'update':
        $id = $_POST['id'];
        $pass = trim($_POST['password']);
        $notes = $_POST['notes'] ?? '';
        $max_conn = intval($_POST['max_connections'] ?? 1);

        if(empty($id) || empty($pass)) { echo json_encode(['status'=>false, 'msg'=>'Dados inválidos']); exit; }

        $sql = "UPDATE users SET password = ?, notes = ?, max_connections = ? WHERE id = ?";
        $stmt = $pdo->prepare($sql);

        if($stmt->execute([$pass, $notes, $max_conn, $id])) {
            echo json_encode(['status'=>true, 'msg'=>'Dados atualizados com sucesso!']);
        } else {
            echo json_encode(['status'=>false, 'msg'=>'Erro ao atualizar']);
        }
    break;

    // === RENOVAÇÃO NORMAL ===
    case 'renew':
        $id = $_POST['id'];
        $months = intval($_POST['months']);
        if($months < 1) $months = 1;

        $stmt = $pdo->prepare("SELECT username, password, expire_date FROM users WHERE id = ?");
        $stmt->execute([$id]);
        $u = $stmt->fetch(PDO::FETCH_ASSOC);

        if(!$u) { echo json_encode(['status'=>false, 'msg'=>'Cliente não encontrado']); exit; }

        $base = (strtotime($u['expire_date']) > time()) ? $u['expire_date'] : date('Y-m-d H:i:s');
        $new_exp = date('Y-m-d H:i:s', strtotime("$base +$months months"));

        $up = $pdo->prepare("UPDATE users SET expire_date = ?, active = 1 WHERE id = ?");
        if($up->execute([$new_exp, $id])) {
            echo json_encode([
                'status' => true, 
                'msg' => 'Renovado com sucesso!',
                'data' => [
                    'username' => $u['username'],
                    'password' => $u['password'],
                    'expire_view' => date('d/m/Y', strtotime($new_exp))
                ]
            ]);
        }
    break;

    // === RENOVAÇÃO CONFIANÇA (CORRIGIDA E BLINDADA) ===
    case 'renew_confianca':
        $id = $_POST['id'];
        
        // Seleciona a coluna 'last_confianca' que vimos na sua foto
        $stmt = $pdo->prepare("SELECT username, password, expire_date, last_confianca FROM users WHERE id = ?");
        $stmt->execute([$id]);
        $u = $stmt->fetch(PDO::FETCH_ASSOC);

        if(!$u) { echo json_encode(['status'=>false, 'msg'=>'Cliente não encontrado']); exit; }

        // --- VERIFICAÇÃO DE LIMITE (Modo seguro para não travar) ---
        if (!empty($u['last_confianca']) && $u['last_confianca'] != '0000-00-00 00:00:00') {
            // Usa strtotime que é mais resistente que DateTime
            $mes_ultimo_uso = date('Y-m', strtotime($u['last_confianca']));
            $mes_atual = date('Y-m');

            if ($mes_ultimo_uso === $mes_atual) {
                echo json_encode(['status'=>false, 'msg'=>'Limite atingido: Já usou confiança este mês!']);
                exit;
            }
        }
        // -----------------------------------------------------------

        $base = (strtotime($u['expire_date']) > time()) ? $u['expire_date'] : date('Y-m-d H:i:s');
        $new_exp = date('Y-m-d H:i:s', strtotime("$base +$confianca_dias days"));

        // Atualiza usando NOW()
        $up = $pdo->prepare("UPDATE users SET expire_date = ?, active = 1, last_confianca = NOW() WHERE id = ?");
        
        if($up->execute([$new_exp, $id])) {
            echo json_encode([
                'status' => true, 
                'msg' => "Confiança ($confianca_dias dias) aplicada!",
                'data' => [
                    'username' => $u['username'],
                    'password' => $u['password'],
                    'expire_view' => date('d/m/Y', strtotime($new_exp))
                ]
            ]);
        } else {
            echo json_encode(['status'=>false, 'msg'=>'Erro no banco de dados ao renovar']);
        }
    break;

    // === PEGAR CLIENTE ===
    case 'get_client':
        $id = $_GET['id'];
        $stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
        $stmt->execute([$id]);
        $u = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if($u) {
            echo json_encode([
                'status'=>true, 
                'data'=>[
                    'id'=>$u['id'],
                    'username'=>$u['username'], 
                    'password'=>$u['password'], 
                    'notes'=>$u['notes'],
                    'max_connections'=>$u['max_connections'],
                    'is_trial'=>$u['is_trial'],
                    'bouquets'=>$u['bouquets'],
                    'expire_view'=>date('d/m/Y H:i', strtotime($u['expire_date'])),
                    'server_url' => $server_url
                ]
            ]);
        } else {
            echo json_encode(['status'=>false, 'msg'=>'Erro']);
        }
    break;

    // === DELETAR ===
    case 'delete':
        $pdo->prepare("DELETE FROM users WHERE id = ?")->execute([$_POST['id']]);
        echo json_encode(['status'=>true]);
    break;

    // === TOGGLE BLOCK ===
    case 'toggle_block':
        $pdo->prepare("UPDATE users SET active = ? WHERE id = ?")->execute([$_POST['active'], $_POST['id']]);
        echo json_encode(['status'=>true, 'msg'=>'Status alterado']);
    break;
}
?>