<?php
require_once(dirname(__DIR__) . '/config/db.php');
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
header('Content-Type: application/json; charset=utf-8');

function safeJson($d) {
    echo json_encode($d, JSON_UNESCAPED_UNICODE);
    exit;
}

try {
    $acao = $_GET['ajax'] ?? null;

    // ===============================
    // 🔹 LISTAR ÁRVORE
    // ===============================
    if ($acao === 'tree') {
        $sql = "SELECT cdcentrocusto, cdcentropai, dscentro, flativo
                  FROM back.centro_custo
              ORDER BY dscentro ASC";
        $dados = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);

        // Monta hierarquia
        $itens = [];
        foreach ($dados as $d) $itens[$d['cdcentrocusto']] = $d + ['children' => []];
        $raiz = [];
        foreach ($itens as $cd => &$item) {
            if ($item['cdcentropai'])
                $itens[$item['cdcentropai']]['children'][] = &$item;
            else
                $raiz[] = &$item;
        }
        safeJson($raiz);
    }

    // ===============================
    // 🔹 SALVAR / ATUALIZAR
    // ===============================
    if ($acao === 'salvar') {
        $input = json_decode(file_get_contents('php://input'), true);
        if (!$input) safeJson(['ok' => false, 'msg' => '❌ Dados inválidos.']);

        $codigo = (int)($input['cdcentrocusto'] ?? 0);
        $pai    = $input['cdcentropai'] ?? null;
        $nome   = trim($input['dscentro'] ?? '');
        $ativo  = (int)($input['flativo'] ?? 0);

        if (!$nome)
            safeJson(['ok' => false, 'msg' => '❌ O nome do centro de custo é obrigatório.']);

        if ($codigo > 0) {
            $sql = "UPDATE back.centro_custo 
                       SET dscentro = :n, cdcentropai = :p, flativo = :a
                     WHERE cdcentrocusto = :id";
            $stmt = $pdo->prepare($sql);
            $stmt->execute([':n' => $nome, ':p' => $pai, ':a' => $ativo, ':id' => $codigo]);
            safeJson(['ok' => true, 'msg' => '✅ Centro atualizado com sucesso!']);
        } else {
            $sql = "INSERT INTO back.centro_custo (dscentro, cdcentropai, flativo, dthcriacao)
                    VALUES (:n, :p, :a, NOW())";
            $stmt = $pdo->prepare($sql);
            $stmt->execute([':n' => $nome, ':p' => $pai, ':a' => $ativo]);
            safeJson(['ok' => true, 'msg' => '✅ Centro criado com sucesso!']);
        }
    }

    // ===============================
    // 🔹 TOGGLE STATUS
    // ===============================
    if ($acao === 'toggle') {
        $id = (int)($_GET['id'] ?? 0);
        if ($id <= 0) safeJson(['ok' => false, 'msg' => 'ID inválido.']);
        $pdo->exec("UPDATE back.centro_custo SET flativo = CASE WHEN flativo=0 THEN 1 ELSE 0 END WHERE cdcentrocusto = $id");
        safeJson(['ok' => true, 'msg' => '🔁 Status alterado com sucesso.']);
    }

    // ===============================
    // 🔹 EXCLUIR
    // ===============================
    if ($acao === 'delete') {
        $id = (int)($_GET['id'] ?? 0);
        if ($id <= 0) safeJson(['ok' => false, 'msg' => 'ID inválido.']);
        $pdo->prepare("DELETE FROM back.centro_custo WHERE cdcentrocusto = :id")->execute([':id' => $id]);
        safeJson(['ok' => true, 'msg' => '🗑️ Centro excluído com sucesso.']);
    }

    safeJson(['ok' => false, 'msg' => 'Ação desconhecida.']);

} catch (Exception $e) {
    safeJson(['ok' => false, 'msg' => '❌ Erro geral: ' . $e->getMessage()]);
}
