<?php
// Arquivo: api/actions.php
session_start();

// Tenta conectar ao banco. Se falhar, retorna erro JSON para o alerta aparecer na tela.
try {
    if (!file_exists('../includes/db.php')) {
        throw new Exception("Arquivo de conexão '../includes/db.php' não encontrado.");
    }
    require_once '../includes/db.php';
} catch (Exception $e) {
    header('Content-Type: application/json');
    echo json_encode(['status' => false, 'msg' => 'Erro Crítico: ' . $e->getMessage()]);
    exit;
}

header('Content-Type: application/json');

// Verifica sessão
if (!isset($_SESSION['logged_in_fxtream'])) { 
    echo json_encode(['status'=>false, 'msg'=>'Sessão expirada. Atualize a página.']); 
    exit; 
}

$user_id = $_SESSION['user_id'];
$role = $_SESSION['role'];
$action = $_REQUEST['action'] ?? '';

// --- 1. CRIAR NOVO CLIENTE ---
if ($action == 'create_client') {
    $is_trial = $_POST['is_trial'];
    $username = trim($_POST['username']);
    $password = trim($_POST['password']);
    $duration = (int)$_POST['duration'];
    $notes = $_POST['notes'];
    $bouquets = isset($_POST['bouquets']) ? implode(',', $_POST['bouquets']) : '';

    if(empty($username) || empty($password)) {
        echo json_encode(['status'=>false, 'msg'=>'Preencha usuário e senha!']); exit;
    }

    // Verifica duplicidade
    $stmt = $pdo->prepare("SELECT id FROM users WHERE username = ?");
    $stmt->execute([$username]);
    if ($stmt->rowCount() > 0) {
        echo json_encode(['status'=>false, 'msg'=>'Este usuário já existe!']); exit;
    }

    // Calcula validade e créditos
    if ($is_trial == 1) {
        $expire = date('Y-m-d H:i:s', strtotime("+$duration hours"));
    } else {
        // Se for oficial, desconta créditos (exceto admin)
        if ($role !== 'admin') {
            $stmt = $pdo->prepare("SELECT credits FROM revendedores WHERE id = ?");
            $stmt->execute([$user_id]);
            $credits = $stmt->fetchColumn();
            
            // Custo: 1 crédito por mês (ajuste se necessário)
            $cost = ($duration >= 1) ? $duration : 1; 
            
            if ($credits < $cost) {
                echo json_encode(['status'=>false, 'msg'=>"Sem créditos! Necessário: $cost"]); exit;
            }
            $pdo->prepare("UPDATE revendedores SET credits = credits - ? WHERE id = ?")->execute([$cost, $user_id]);
        }
        $expire = date('Y-m-d H:i:s', strtotime("+$duration months"));
    }

    try {
        $sql = "INSERT INTO users (revendedor_id, username, password, expire_date, active, is_trial, bouquets, max_connections, notes) VALUES (?, ?, ?, ?, 1, ?, ?, 1, ?)";
        $stmt = $pdo->prepare($sql);
        $stmt->execute([$user_id, $username, $password, $expire, $is_trial, $bouquets, $notes]);
        echo json_encode(['status'=>true, 'msg'=>'Cliente criado com sucesso!']);
    } catch (Exception $e) {
        echo json_encode(['status'=>false, 'msg'=>'Erro SQL: ' . $e->getMessage()]);
    }
    exit;
}

// --- 2. EDITAR CLIENTE ---
if ($action == 'edit_client') {
    $id = $_POST['id'];
    $pass = $_POST['password'];
    $date = $_POST['expire_date']; 
    $active = $_POST['active'];
    $notes = $_POST['notes'];
    $bouquets = isset($_POST['bouquets']) ? implode(',', $_POST['bouquets']) : '';

    // Segurança: Verifica se o cliente pertence ao revendedor
    if ($role !== 'admin') {
        $chk = $pdo->prepare("SELECT id FROM users WHERE id = ? AND revendedor_id = ?");
        $chk->execute([$id, $user_id]);
        if ($chk->rowCount() == 0) {
            echo json_encode(['status'=>false, 'msg'=>'Sem permissão para editar este cliente.']); exit;
        }
    }

    $date_mysql = date('Y-m-d H:i:s', strtotime($date));

    $sql = "UPDATE users SET password = ?, expire_date = ?, active = ?, notes = ?, bouquets = ? WHERE id = ?";
    $stmt = $pdo->prepare($sql);
    
    if($stmt->execute([$pass, $date_mysql, $active, $notes, $bouquets, $id])) {
        echo json_encode(['status'=>true, 'msg'=>'Dados atualizados!']);
    } else {
        echo json_encode(['status'=>false, 'msg'=>'Erro ao salvar edição.']);
    }
    exit;
}

// --- 3. BUSCAR DADOS (PREENCHER MODAL) ---
if ($action == 'get_client') {
    $id = $_GET['id'];
    $stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
    $stmt->execute([$id]);
    $u = $stmt->fetch(PDO::FETCH_ASSOC);

    if ($u) {
        // Formata data para o input do HTML (datetime-local)
        $u['expire_date_fmt'] = date('Y-m-d\TH:i', strtotime($u['expire_date']));
        $u['expire_view'] = date('d/m/Y H:i', strtotime($u['expire_date']));
        echo json_encode(['status'=>true, 'data'=>$u]);
    } else {
        echo json_encode(['status'=>false, 'msg'=>'Cliente não encontrado.']);
    }
    exit;
}

// --- 4. EXCLUIR CLIENTE ---
if ($action == 'delete_client') {
    $id = $_POST['id'];
    // Segurança básica
    if ($role !== 'admin') {
        $pdo->prepare("DELETE FROM users WHERE id = ? AND revendedor_id = ?")->execute([$id, $user_id]);
    } else {
        $pdo->prepare("DELETE FROM users WHERE id = ?")->execute([$id]);
    }
    echo json_encode(['status'=>true, 'msg'=>'Cliente excluído!']);
    exit;
}

// --- 5. BLOQUEAR/DESBLOQUEAR ---
if ($action == 'toggle_status') {
    $id = $_POST['id'];
    $status = ($_POST['status'] == 1) ? 0 : 1;
    
    if ($role !== 'admin') {
        $stmt = $pdo->prepare("UPDATE users SET active = ? WHERE id = ? AND revendedor_id = ?");
        $stmt->execute([$status, $id, $user_id]);
    } else {
        $stmt = $pdo->prepare("UPDATE users SET active = ? WHERE id = ?");
        $stmt->execute([$status, $id]);
    }
    echo json_encode(['status'=>true, 'msg'=>'Status alterado!']);
    exit;
}

// --- 6. RENOVAR (1 MÊS) ---
if ($action == 'renew_client') {
    $id = $_POST['id'];
    
    // Verifica créditos
    if ($role !== 'admin') {
        $cred = $pdo->prepare("SELECT credits FROM revendedores WHERE id = ?");
        $cred->execute([$user_id]);
        if ($cred->fetchColumn() < 1) {
            echo json_encode(['status'=>false, 'msg'=>'Sem saldo para renovar.']); exit;
        }
        $pdo->prepare("UPDATE revendedores SET credits = credits - 1 WHERE id = ?")->execute([$user_id]);
    }

    // Adiciona 1 mês
    $stmt = $pdo->prepare("UPDATE users SET expire_date = DATE_ADD(expire_date, INTERVAL 1 MONTH), active = 1, is_trial = 0 WHERE id = ?");
    $stmt->execute([$id]);
    
    echo json_encode(['status'=>true, 'msg'=>'Cliente Renovado!']);
    exit;
}

// --- 7. CRIAR TESTE RÁPIDO ---
if ($action == 'create_test') {
    $user = $_POST['custom_user'] ?: 'teste'.rand(1000,9999);
    $pass = $_POST['custom_pass'] ?: rand(1000,9999);
    $exp = date('Y-m-d H:i:s', strtotime('+4 hours'));
    
    // 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; }

    $sql = "INSERT INTO users (revendedor_id, username, password, expire_date, active, is_trial, bouquets, max_connections, notes) VALUES (?, ?, ?, ?, 1, 1, '1,2,3,4,5', 1, 'Teste Rápido')";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$user_id, $user, $pass, $exp]);
    
    echo json_encode(['status'=>true, 'username'=>$user, 'msg'=>'Teste criado: '.$user]);
    exit;
}
?>
