<?php
// api/resellers_api.php - Corrigido
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'] ?? '';
$my_id = $_SESSION['user_id'];
$is_admin = (($_SESSION['role'] ?? '') === 'admin');

// Busca URL do Painel
$painel_url = "https://" . $_SERVER['HTTP_HOST'];
try {
    $c = $pdo->query("SELECT dominio_url FROM configuracoes LIMIT 1")->fetch(PDO::FETCH_ASSOC);
    if($c && !empty($c['dominio_url'])) {
        $painel_url = rtrim($c['dominio_url'], '/');
        if (!preg_match("~^(?:f|ht)tps?://~i", $painel_url)) $painel_url = "http://" . $painel_url;
    }
} catch(Exception $e){}

switch($action) {
    case 'list':
        $sql = $is_admin ? "SELECT * FROM revendedores ORDER BY id DESC" : "SELECT * FROM revendedores WHERE parent_id = ? ORDER BY id DESC";
        $stmt = $pdo->prepare($sql);
        $is_admin ? $stmt->execute() : $stmt->execute([$my_id]);
        echo json_encode($stmt->fetchAll(PDO::FETCH_ASSOC));
    break;

    case 'save':
        $id = $_POST['id'];
        $user = trim($_POST['username']);
        $pass = trim($_POST['password']);
        $email = trim($_POST['email']);
        $credits = intval($_POST['credits']);

        if(empty($user)) { echo json_encode(['status'=>false, 'msg'=>'Login obrigatório']); exit; }

        if(empty($id)) {
            // === CRIAR NOVO ===
            if(empty($pass)) { echo json_encode(['status'=>false, 'msg'=>'Senha obrigatória']); exit; }
            
            // Verifica duplicidade
            $chk = $pdo->prepare("SELECT id FROM revendedores WHERE username = ?");
            $chk->execute([$user]);
            if($chk->rowCount() > 0) { echo json_encode(['status'=>false, 'msg'=>'Usuário já existe']); exit; }

            // Verifica meus créditos (se não for admin)
            if(!$is_admin) {
                // Correção de segurança na consulta
                $stmtSaldo = $pdo->prepare("SELECT credits FROM revendedores WHERE id = ?");
                $stmtSaldo->execute([$my_id]);
                $myCreds = $stmtSaldo->fetchColumn();

                if($myCreds < $credits) { echo json_encode(['status'=>false, 'msg'=>'Saldo insuficiente']); exit; }
                
                // Desconta de mim
                $pdo->prepare("UPDATE revendedores SET credits = credits - ? WHERE id = ?")->execute([$credits, $my_id]);
                
                // OBS: Comentei a linha abaixo pois ela costuma dar erro se a tabela não existir ou se o ID 0 for inválido
                // $pdo->prepare("INSERT INTO credits_log (admin_id, reseller_id, credits, type, date) VALUES (?, ?, ?, 'transfer', NOW())")->execute([$my_id, 0, $credits]);
            }

            $sql = "INSERT INTO revendedores (username, password, email, credits, parent_id, active, created_at, role) VALUES (?, ?, ?, ?, ?, 1, NOW(), 'reseller')";
            
            if($pdo->prepare($sql)->execute([$user, $pass, $email, $credits, $my_id])) {
                
                // RETORNA DADOS PARA O JAVASCRIPT MONTAR A MENSAGEM
                echo json_encode([
                    'status'=>true, 
                    'msg'=>'Revendedor criado com sucesso!',
                    'new_reseller' => [
                        'username' => $user,
                        'password' => $pass,
                        'url' => $painel_url,
                        'credits' => $credits
                    ]
                ]);
            } else {
                echo json_encode(['status'=>false, 'msg'=>'Erro ao gravar no banco de dados.']);
            }
        } else {
            // === EDITAR ===
            $sql = "UPDATE revendedores SET username = ?, email = ? WHERE id = ?";
            $params = [$user, $email, $id];
            
            if(!empty($pass)) {
                $sql = "UPDATE revendedores SET username = ?, email = ?, password = ? WHERE id = ?";
                $params = [$user, $email, $pass, $id];
            }
            
            if($pdo->prepare($sql)->execute($params)) {
                echo json_encode(['status'=>true, 'msg'=>'Atualizado!']);
            }
        }
    break;

    case 'manage_credits':
        $target_id = $_POST['id'];
        $type = $_POST['type']; // add ou remove
        $amount = intval($_POST['amount']);

        if($amount < 1) { echo json_encode(['status'=>false, 'msg'=>'Valor inválido']); exit; }

        // Pega nome do revendedor para a mensagem
        $targetName = $pdo->query("SELECT username FROM revendedores WHERE id = $target_id")->fetchColumn();

        if($type == 'add') {
            if(!$is_admin) {
                $stmtSaldo = $pdo->prepare("SELECT credits FROM revendedores WHERE id = ?");
                $stmtSaldo->execute([$my_id]);
                $myCreds = $stmtSaldo->fetchColumn();

                if($myCreds < $amount) { echo json_encode(['status'=>false, 'msg'=>'Seu saldo é insuficiente']); exit; }
                
                $pdo->prepare("UPDATE revendedores SET credits = credits - ? WHERE id = ?")->execute([$amount, $my_id]);
            }
            $pdo->prepare("UPDATE revendedores SET credits = credits + ? WHERE id = ?")->execute([$amount, $target_id]);
            
            // Retorna dados para mensagem de crédito
            echo json_encode([
                'status'=>true, 
                'msg'=>'Créditos adicionados!',
                'credit_info' => [
                    'username' => $targetName,
                    'amount' => $amount
                ]
            ]);

        } else {
            // Remover
            $pdo->prepare("UPDATE revendedores SET credits = credits - ? WHERE id = ?")->execute([$amount, $target_id]);
            if(!$is_admin) {
                $pdo->prepare("UPDATE revendedores SET credits = credits + ? WHERE id = ?")->execute([$amount, $my_id]);
            }
            echo json_encode(['status'=>true, 'msg'=>'Créditos removidos!']);
        }
    break;

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