<?php
/**
 * clientes_csv.php — Exportação (?acao=exportar) e importação (?acao=importar, POST multipart) de clientes via CSV.
 * Colunas: nome,whatsapp,email,servidor,plano,plano_meses,valor,usuario_painel,senha_painel,vencimento,status
 */

require_once __DIR__ . '/../core/db_helper.php';
require_once __DIR__ . '/../core/auth.php';

$usuarioLogado = exigir_login();
$acao = $_GET['acao'] ?? 'exportar';
$colunas = ['nome', 'whatsapp', 'email', 'servidor', 'plano', 'plano_meses', 'valor', 'usuario_painel', 'senha_painel', 'vencimento', 'status'];

if ($acao === 'exportar') {
    $escopo = escopo_visibilidade($usuarioLogado);
    $clientes = db_read('clientes');
    if ($escopo !== null) {
        $clientes = array_values(array_filter($clientes, fn($c) => in_array($c['criado_por'] ?? '', $escopo, true)));
    }
    if (!empty($_GET['status'])) {
        $clientes = array_values(array_filter($clientes, fn($c) => ($c['status'] ?? '') === $_GET['status']));
    }

    header('Content-Type: text/csv; charset=utf-8');
    header('Content-Disposition: attachment; filename="clientes_' . date('Y-m-d_His') . '.csv"');
    $saida = fopen('php://output', 'w');
    fputcsv($saida, $colunas, ';');
    foreach ($clientes as $c) {
        $linha = [];
        foreach ($colunas as $col) {
            $linha[] = $c[$col] ?? '';
        }
        fputcsv($saida, $linha, ';');
    }
    fclose($saida);
    exit;
}

if ($acao === 'importar') {
    header('Content-Type: application/json; charset=utf-8');
    if (empty($_FILES['arquivo']['tmp_name'])) {
        http_response_code(422);
        echo json_encode(['ok' => false, 'erro' => 'Nenhum arquivo enviado.']);
        exit;
    }

    $fp = fopen($_FILES['arquivo']['tmp_name'], 'r');
    $cabecalho = fgetcsv($fp, 0, ';');
    $importados = 0;
    $erros = [];

    $novos = [];
    while (($linha = fgetcsv($fp, 0, ';')) !== false) {
        $registro = array_combine($cabecalho, $linha);
        if (empty($registro['nome']) || empty($registro['whatsapp'])) {
            $erros[] = "Linha ignorada (faltando nome/whatsapp): " . implode(';', $linha);
            continue;
        }
        $novos[] = [
            'id' => gerar_id('CLI-'),
            'nome' => $registro['nome'],
            'whatsapp' => preg_replace('/\D/', '', $registro['whatsapp']),
            'email' => $registro['email'] ?? '',
            'servidor' => $registro['servidor'] ?? '',
            'plano' => $registro['plano'] ?? '',
            'plano_meses' => (int) ($registro['plano_meses'] ?? 1),
            'valor' => (float) ($registro['valor'] ?? 0),
            'usuario_painel' => $registro['usuario_painel'] ?? '',
            'senha_painel' => $registro['senha_painel'] ?? '',
            'vencimento' => normalizar_vencimento($registro['vencimento'] ?? null),
            'status' => $registro['status'] ?? 'Ativo',
            'tipo' => 'cliente',
            'notificado_3_dias' => false,
            'notificado_no_dia' => false,
            'dias_notificados' => [],
            'criado_por' => $usuarioLogado['id'],
            'criado_em' => date('Y-m-d H:i:s'),
            'logs' => [['data' => date('Y-m-d H:i:s'), 'acao' => 'Importado via CSV por ' . $usuarioLogado['usuario']]],
        ];
        $importados++;
    }
    fclose($fp);

    if ($novos) {
        db_update('clientes', function (&$clientes) use ($novos) {
            foreach ($novos as $n) {
                $clientes[] = $n;
            }
        });
    }

    auditoria_log($usuarioLogado['usuario'], 'IMPORTACAO_CSV', "$importados clientes importados");
    echo json_encode(['ok' => true, 'importados' => $importados, 'erros' => $erros], JSON_UNESCAPED_UNICODE);
    exit;
}

http_response_code(400);
echo json_encode(['ok' => false, 'erro' => 'Ação inválida.']);
