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

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'];
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;
    }
    $confianca_dias = $c['confianca_dias'] ?? 3;
} catch(Exception $e){}

switch($action) {

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

        // Validação básica
        if(empty($user) || empty($pass)) { echo json_encode(['status'=>false, 'msg'=>'Preencha todos os campos']); exit; }

        // Verifica duplicidade
        $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; }

        // Calcula Vencimento
        if($is_trial == 1) {
            // Horas
            $exp = date('Y-m-d H:i:s', strtotime("+$duration hours"));
        } else {
            // Meses (Consome crédito)
            // Aqui você deve adicionar a lógica de descontar crédito se necessário
            $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, ?, ?, '[]', 1)";
        $stmt = $pdo->prepare($sql);
        
        if($stmt->execute([$user, $pass, $admin_id, $exp, $is_trial, $notes])) {
            $newId = $pdo->lastInsertId();
            
            // RETORNA DADOS PARA O MODAL
            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;

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

        // Pega dados atuais
        $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; }

        // Calcula
        $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)) // Formato curto para a mensagem de renovação
                ]
            ]);
        }
    break;

    // === RENOVAÇÃO CONFIANÇA ===
    case 'renew_confianca':
        $id = $_POST['id'];
        
        $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 +$confianca_dias days"));

        $up = $pdo->prepare("UPDATE users SET expire_date = ?, active = 1 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))
                ]
            ]);
        }
    break;

    // === PEGAR CLIENTE (SHARE) ===
    case 'get_client':
        $id = $_GET['id'];
        $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'=>true, 
                'data'=>[
                    'username'=>$u['username'], 
                    'password'=>$u['password'], 
                    '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;

    // === OUTRAS AÇÕES (DELETE, TOGGLE) MANTENHA AS SUAS AQUI ===
    case 'delete':
        $pdo->prepare("DELETE FROM users WHERE id = ?")->execute([$_POST['id']]);
        echo json_encode(['status'=>true]);
    break;

    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;
}
?>
