<?php
require_once 'db_config.php';
session_start();

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

if (!isset($_SESSION['usuario_id'])) {
    echo json_encode(['status' => 'error', 'message' => 'Não autorizado']);
    exit;
}

$usuario_id = $_SESSION['usuario_id'];
$method = $_SERVER['REQUEST_METHOD'];

try {
    switch ($method) {
        case 'GET':
            // Listar ativos
            $stmt = $pdo->prepare("
                SELECT id, ticker, nome, tipo, quantidade_total, quantidade_bloqueada, preco_medio,
                (quantidade_total - quantidade_bloqueada) as quantidade_livre,
                (quantidade_total * preco_medio) as valor_investido
                FROM ativos 
                WHERE usuario_id = ?
                ORDER BY ticker ASC
            ");
            $stmt->execute([$usuario_id]);
            $ativos = $stmt->fetchAll();
            echo json_encode(['status' => 'success', 'data' => $ativos]);
            break;

        case 'POST':
            // Criar novo ativo
            $data = json_decode(file_get_contents('php://input'), true);
            $ticker = strtoupper($data['ticker']);
            $nome = $data['nome'];
            $tipo = $data['tipo'];
            $quantidade = $data['quantidade'] ?? 0;
            $preco_medio = $data['preco_medio'] ?? 0;

            // Verificar se já existe
            $stmtCheck = $pdo->prepare("SELECT id FROM ativos WHERE ticker = ? AND usuario_id = ?");
            $stmtCheck->execute([$ticker, $usuario_id]);
            if ($stmtCheck->fetch()) {
                echo json_encode(['status' => 'error', 'message' => 'Ativo já cadastrado na sua carteira.']);
                exit;
            }

            $stmt = $pdo->prepare("
                INSERT INTO ativos (usuario_id, ticker, nome, tipo, quantidade_total, preco_medio)
                VALUES (?, ?, ?, ?, ?, ?)
            ");
            $stmt->execute([$usuario_id, $ticker, $nome, $tipo, $quantidade, $preco_medio]);
            $ativo_id = $pdo->lastInsertId();

            // Se inseriu quantidade inicial, registrar na tabela de movimentações
            if ($quantidade > 0) {
                $stmtMov = $pdo->prepare("
                    INSERT INTO movimentacoes (usuario_id, ativo_id, tipo_movimento, quantidade, preco_unitario, notas)
                    VALUES (?, ?, 'COMPRA', ?, ?, 'Saldo Inicial')
                ");
                $stmtMov->execute([$usuario_id, $ativo_id, $quantidade, $preco_medio]);
            }

            registrar_auditoria($pdo, $usuario_id, 'CRIAR_ATIVO', 'ativos', $ativo_id, null, $data);
            echo json_encode(['status' => 'success', 'message' => 'Ativo cadastrado com sucesso', 'id' => $ativo_id]);
            break;

        case 'PUT':
            // Atualizar ativo
            $data = json_decode(file_get_contents('php://input'), true);
            $id = $data['id'];
            $ticker = strtoupper($data['ticker']);
            $nome = $data['nome'];
            $tipo = $data['tipo'];

            $stmt = $pdo->prepare("SELECT * FROM ativos WHERE id = ? AND usuario_id = ?");
            $stmt->execute([$id, $usuario_id]);
            $antigo = $stmt->fetch();

            if (!$antigo) {
                echo json_encode(['status' => 'error', 'message' => 'Ativo não encontrado.']);
                exit;
            }

            $stmtUpdate = $pdo->prepare("UPDATE ativos SET ticker = ?, nome = ?, tipo = ? WHERE id = ?");
            $stmtUpdate->execute([$ticker, $nome, $tipo, $id]);

            registrar_auditoria($pdo, $usuario_id, 'ATUALIZAR_ATIVO', 'ativos', $id, $antigo, $data);
            echo json_encode(['status' => 'success', 'message' => 'Ativo atualizado com sucesso']);
            break;

        case 'DELETE':
            // Deletar ativo
            $id = $_GET['id'] ?? null;
            if (!$id) {
                echo json_encode(['status' => 'error', 'message' => 'ID não informado']);
                exit;
            }

            $stmtCheck = $pdo->prepare("SELECT quantidade_total, quantidade_bloqueada FROM ativos WHERE id = ? AND usuario_id = ?");
            $stmtCheck->execute([$id, $usuario_id]);
            $ativo = $stmtCheck->fetch();

            if (!$ativo) {
                echo json_encode(['status' => 'error', 'message' => 'Ativo não encontrado.']);
                exit;
            }

            if ($ativo['quantidade_total'] > 0 || $ativo['quantidade_bloqueada'] > 0) {
                echo json_encode(['status' => 'error', 'message' => 'Não é possível excluir um ativo que possui saldo na carteira. Zere a posição primeiro.']);
                exit;
            }

            $stmt = $pdo->prepare("DELETE FROM ativos WHERE id = ? AND usuario_id = ?");
            $stmt->execute([$id, $usuario_id]);

            registrar_auditoria($pdo, $usuario_id, 'DELETAR_ATIVO', 'ativos', $id, $ativo, null);
            echo json_encode(['status' => 'success', 'message' => 'Ativo excluído com sucesso']);
            break;

        default:
            echo json_encode(['status' => 'error', 'message' => 'Método não suportado']);
            break;
    }
} catch (PDOException $e) {
    echo json_encode(['status' => 'error', 'message' => 'Erro no banco de dados: ' . $e->getMessage()]);
}
?>
