<?php
// exportar_clientes.php
require_once "conexao.php";
session_start();

/**
 * =====================================================
 * CONFIGURAÇÃO DE ERROS (pode desativar em produção)
 * =====================================================
 */
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
error_reporting(E_ALL);
ini_set('display_errors', 1);

/**
 * =====================================================
 * VALIDAÇÕES INICIAIS
 * =====================================================
 */

// CSRF
if (!isset($_POST["csrf_token"]) || $_POST["csrf_token"] !== ($_SESSION["csrf_token"] ?? "")) {
    echo json_encode([
        "success" => false,
        "message" => "Token CSRF inválido."
    ]);
    exit;
}

// Autenticação
if (!isset($_SESSION["logado"]) || $_SESSION["logado"] !== true) {
    echo json_encode([
        "success" => false,
        "message" => "Usuário não autenticado."
    ]);
    exit;
}

$tenant_id   = $_SESSION["tenant_id"] ?? null;
$usuario_id  = $_SESSION["usuario_id"] ?? null;
$permissao   = $_SESSION["permissao"] ?? "usuario";

$is_admin        = ($permissao === "admin");
$is_super_admin  = ($permissao === "super_admin");

if (!$tenant_id || !is_numeric($tenant_id)) {
    echo json_encode([
        "success" => false,
        "message" => "Tenant inválido."
    ]);
    exit;
}

/**
 * =====================================================
 * VERIFICAR PERMISSÃO DE VISUALIZAR TODOS OS CLIENTES
 * =====================================================
 */
try {
    $stmtPerm = $conn->prepare("
        SELECT ver_todos_clientes 
        FROM usuarios 
        WHERE id = ?
    ");
    $stmtPerm->bind_param("i", $usuario_id);
    $stmtPerm->execute();
    $resPerm = $stmtPerm->get_result();
    $rowPerm = $resPerm->fetch_assoc();
    $ver_todos_clientes = (int)($rowPerm["ver_todos_clientes"] ?? 0);
    $stmtPerm->close();
} catch (Throwable $e) {
    echo json_encode([
        "success" => false,
        "message" => "Erro ao verificar permissões.",
        "error"   => $e->getMessage()
    ]);
    exit;
}

/**
 * =====================================================
 * SELECT COMPLETO COM TODAS AS COLUNAS NECESSÁRIAS
 * =====================================================
 * Inclui nome do funil, nome da etapa E NOME DA ORIGEM
 */
$select_clientes = "
    SELECT
        c.Nome_Cliente,
        c.CPF_CNPJ,
        c.Email,
        c.Telefone,
        c.Telefone2,
        c.Celular,
        o.nome AS Origem,  -- AQUI: Substitui c.Origem pelo nome da origem
        c.Endereco,
        c.Cidade,
        c.Estado,
        c.Bairro,
        c.Complemento,
        c.CEP,
        c.instagram,
        c.linkedin,
        c.Obs,
        c.status,
        c.concluida,
        c.Data_Cadastro,
        c.Observacoes,
        c.deletado_em,
        c.atualizado_em,
        c.usuario_cadastro,
        c.regiao,
        c.Pais,
        c.responsavel,
        c.provincia,
        c.quota_arquivos_mb,
        c.espaco_utilizado_mb,
        f.nome AS nome_funil,
        ef.nome AS nome_etapa_funil,
        u.nome AS responsavel_nome,
        ur.nome AS usuario_cadastro_nome
    FROM clientes c
    LEFT JOIN usuarios u ON c.responsavel = u.id 
    LEFT JOIN usuarios ur ON c.usuario_cadastro = ur.id 
    LEFT JOIN funis f ON c.funil_id = f.id AND f.tenant_id = c.tenant_id
    LEFT JOIN etapas_funis ef ON c.etapa_funil_id = ef.id AND ef.funil_id = c.funil_id
    LEFT JOIN origens o ON c.origem_id = o.id AND o.tenant_id = c.tenant_id  -- AQUI: JOIN com a tabela origens
";

/**
 * =====================================================
 * AÇÃO
 * =====================================================
 */
$action = $_POST["action"] ?? "";

try {

    switch ($action) {

        /**
         * ---------------------------------------------
         * EXPORTAR TODOS
         * ---------------------------------------------
         */
        case "export_all":

            if ($is_admin || $is_super_admin || $ver_todos_clientes === 1) {

                $sql = $select_clientes . "
                    WHERE c.tenant_id = ?
                    ORDER BY c.Nome_Cliente ASC
                ";

                $stmt = $conn->prepare($sql);
                $stmt->bind_param("i", $tenant_id);

            } else {

                $sql = $select_clientes . "
                    WHERE c.tenant_id = ?
                      AND c.responsavel = ?
                    ORDER BY c.Nome_Cliente ASC
                ";

                $stmt = $conn->prepare($sql);
                $stmt->bind_param("ii", $tenant_id, $usuario_id);
            }

            break;

        /**
         * ---------------------------------------------
         * EXPORTAR SELECIONADOS
         * ---------------------------------------------
         */
        case "export_selected":

            if (!isset($_POST["ids"]) || !is_array($_POST["ids"])) {
                throw new Exception("Nenhum cliente selecionado.");
            }

            $ids = array_map("intval", $_POST["ids"]);
            if (empty($ids)) {
                throw new Exception("Lista de clientes vazia.");
            }

            $placeholders = implode(",", array_fill(0, count($ids), "?"));

            if ($is_admin || $is_super_admin || $ver_todos_clientes === 1) {

                $sql = $select_clientes . "
                    WHERE c.tenant_id = ?
                      AND c.id IN ($placeholders)
                    ORDER BY c.Nome_Cliente ASC
                ";

                $params = array_merge([$tenant_id], $ids);

            } else {

                $sql = $select_clientes . "
                    WHERE c.tenant_id = ?
                      AND c.responsavel = ?
                      AND c.id IN ($placeholders)
                    ORDER BY c.Nome_Cliente ASC
                ";

                $params = array_merge([$tenant_id, $usuario_id], $ids);
            }

            $types = str_repeat("i", count($params));
            $stmt  = $conn->prepare($sql);
            $stmt->bind_param($types, ...$params);

            break;

        /**
         * ---------------------------------------------
         * EXPORTAR ÚNICO
         * ---------------------------------------------
         */
        case "export_single":

            if (!isset($_POST["id"]) || !is_numeric($_POST["id"])) {
                throw new Exception("ID do cliente inválido.");
            }

            $id = (int)$_POST["id"];

            if ($is_admin || $is_super_admin || $ver_todos_clientes === 1) {

                $sql = $select_clientes . "
                    WHERE c.tenant_id = ?
                      AND c.id = ?
                ";

                $stmt = $conn->prepare($sql);
                $stmt->bind_param("ii", $tenant_id, $id);

            } else {

                $sql = $select_clientes . "
                    WHERE c.tenant_id = ?
                      AND c.responsavel = ?
                      AND c.id = ?
                ";

                $stmt = $conn->prepare($sql);
                $stmt->bind_param("iii", $tenant_id, $usuario_id, $id);
            }

            break;

        default:
            throw new Exception("Ação inválida.");
    }

    /**
     * =================================================
     * EXECUÇÃO
     * =================================================
     */
    $stmt->execute();
    $result = $stmt->get_result();

    $clientes = [];
    while ($row = $result->fetch_assoc()) {
        // Converter valores booleanos para texto legível
        $row['concluida_texto'] = ($row['concluida'] == 1 || $row['concluida'] === '1') ? 'Sim' : 'Não';
        
        // Status mapeado para texto
       
        // Converter região numérica para texto
        if ($row['regiao'] && is_numeric($row['regiao'])) {
            $regioes = [
                1 => 'Norte',
                2 => 'Nordeste',
                3 => 'Centro-Oeste',
                4 => 'Sudeste',
                5 => 'Sul'
            ];
            $row['regiao_texto'] = $regioes[$row['regiao']] ?? $row['regiao'];
        } else {
            $row['regiao_texto'] = $row['regiao'];
        }
        
        // Garantir que todos os campos tenham valor
        $camposParaGarantir = [
            'Nome_Cliente' => '',
            'CPF_CNPJ' => '',
            'Email' => '',
            'Telefone' => '',
            'Telefone2' => '',
            'Celular' => '',
            'Origem' => 'Não definida',  // AQUI: Valor padrão para origem
            'Endereco' => '',
            'Cidade' => '',
            'Estado' => '',
            'Bairro' => '',
            'Complemento' => '',
            'CEP' => '',
            'instagram' => '',
            'linkedin' => '',
            'Obs' => '',
            'Observacoes' => '',
            'deletado_em' => '',
            'atualizado_em' => '',
            'usuario_cadastro' => '',
            'usuario_cadastro_nome' => '',
            'regiao' => '',
            'Pais' => 'Brasil',
            'responsavel' => '',
            'responsavel_nome' => 'Não atribuído',
            'provincia' => '',
            'quota_arquivos_mb' => '',
            'espaco_utilizado_mb' => '',
            'nome_funil' => 'Não definido',
            'nome_etapa_funil' => 'Não definida'
        ];
        
        foreach ($camposParaGarantir as $campo => $valorPadrao) {
            if (!isset($row[$campo]) || $row[$campo] === null) {
                $row[$campo] = $valorPadrao;
            }
        }
        
        $clientes[] = $row;
    }

    $stmt->close();

    /**
     * =================================================
     * RETORNO FINAL
     * =================================================
     */
    echo json_encode([
        "success" => true,
        "message" => count($clientes) . " cliente(s) encontrado(s).",
        "clientes" => $clientes,
        "total" => count($clientes)
    ]);
    exit;

} catch (Throwable $e) {

    echo json_encode([
        "success" => false,
        "message" => "Erro ao exportar clientes.",
        "error"   => $e->getMessage()
    ]);
    exit;
}
?>