<?php
// Garantir UTF-8
ini_set('default_charset', 'UTF-8');
header('Content-Type: text/html; charset=utf-8');

include 'verifica_login.php';
include 'conexao.php';
include 'config/base_utils.php';
$conn = conectar_banco();
garantir_estrutura_bases($conn);

$modo_base = trim($_POST['modo_base'] ?? 'existente');
$idbase_existente = (int)($_POST['idbase_existente'] ?? 0);
$base_nova = trim($_POST['base_nova'] ?? '');

if ($modo_base === 'nova') {
    $idbase_importacao = obter_ou_criar_base($conn, $base_nova);
    $base_importacao = obter_nome_base_por_id($conn, $idbase_importacao);
} else {
    $idbase_importacao = $idbase_existente;
    $base_importacao = obter_nome_base_por_id($conn, $idbase_importacao);
}

if ($idbase_importacao <= 0 || $base_importacao === '') {
    header('Location: importar_contatos_empresa.php?msg=erro&detalhe=' . urlencode('Selecione uma base existente ou informe o nome da base.'));
    exit;
}

if ($_SERVER['REQUEST_METHOD'] !== 'POST' || !isset($_FILES['arquivo_csv'])) {
    header('Location: importar_contatos_empresa.php?msg=erro&detalhe=Nenhum arquivo enviado');
    exit;
}

$arquivo = $_FILES['arquivo_csv'];

// Validar upload
if ($arquivo['error'] !== UPLOAD_ERR_OK) {
    header('Location: importar_contatos_empresa.php?msg=erro&detalhe=Erro no upload do arquivo');
    exit;
}

// Validar extensão
$extensao = strtolower(pathinfo($arquivo['name'], PATHINFO_EXTENSION));
if ($extensao !== 'csv') {
    header('Location: importar_contatos_empresa.php?msg=erro&detalhe=Formato inválido. Envie um arquivo CSV');
    exit;
}

// Abrir arquivo CSV
$handle = fopen($arquivo['tmp_name'], 'r');
if (!$handle) {
    header('Location: importar_contatos_empresa.php?msg=erro&detalhe=Não foi possível abrir o arquivo');
    exit;
}

// Detectar BOM UTF-8
$primeira_linha = fgets($handle);
if ($primeira_linha === false) {
    fclose($handle);
    header('Location: importar_contatos_empresa.php?msg=erro&detalhe=Arquivo CSV vazio');
    exit;
}
rewind($handle);
if (substr($primeira_linha, 0, 3) === "\xEF\xBB\xBF") {
    fseek($handle, 3);
}

// Buscar empresas pertencentes à base selecionada
$ids_empresa_base = [];
$stmt_empresas_base = $conn->prepare("SELECT ID_EMPRESA FROM empresas WHERE idbase = ?");
if (!$stmt_empresas_base) {
    fclose($handle);
    header('Location: importar_contatos_empresa.php?msg=erro&detalhe=' . urlencode('Falha ao preparar consulta de empresas por base.'));
    exit;
}
$stmt_empresas_base->bind_param('i', $idbase_importacao);
$stmt_empresas_base->execute();
$res_empresas_base = $stmt_empresas_base->get_result();
while ($row_emp = $res_empresas_base->fetch_assoc()) {
    $ids_empresa_base[(int)$row_emp['ID_EMPRESA']] = true;
}
$stmt_empresas_base->close();

if (count($ids_empresa_base) === 0) {
    fclose($handle);
    header('Location: importar_contatos_empresa.php?msg=erro&detalhe=' . urlencode('Nenhuma empresa encontrada na base "' . $base_importacao . '".'));
    exit;
}

$total_importados = 0;
$linha_num = 0;
$erros = [];

// Ignorar cabeçalho
$cabecalho = fgetcsv($handle, 0, ';');
$linha_num++;

if ($cabecalho === false) {
    fclose($handle);
    header('Location: importar_contatos_empresa.php?msg=erro&detalhe=Não foi possível ler o cabeçalho do CSV');
    exit;
}

try {
    $conn->begin_transaction();

    // Apagar somente contatos das empresas da base selecionada
    $stmt_delete_base = $conn->prepare("DELETE ce FROM contatos_empresa ce INNER JOIN empresas e ON e.ID_EMPRESA = ce.id_empresa WHERE e.idbase = ?");
    if (!$stmt_delete_base) {
        throw new Exception('Falha ao preparar limpeza de contatos da base: ' . $conn->error);
    }
    $stmt_delete_base->bind_param('i', $idbase_importacao);
    if (!$stmt_delete_base->execute()) {
        throw new Exception('Falha ao limpar contatos da base selecionada: ' . $stmt_delete_base->error);
    }
    $stmt_delete_base->close();

    // Preparar INSERT
    $stmt_insert = $conn->prepare("INSERT INTO contatos_empresa (id_empresa, depto, nome, sobrenome, cargo, sexo, email, ddd, tel, celular, ramal, linkedin, status_contato) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
    if (!$stmt_insert) {
        throw new Exception('Falha ao preparar inserção de contatos: ' . $conn->error);
    }

    while (($dados = fgetcsv($handle, 0, ';')) !== FALSE) {
        $linha_num++;
        if (count($dados) < 13) {
            $erros[] = "Linha $linha_num: Número insuficiente de colunas";
            continue;
        }

        // Normalizar encoding para UTF-8 e remover espaços
        $dados = array_map(function($item){
            $item = $item ?? '';
            if (!mb_check_encoding($item, 'UTF-8')) {
                $item = mb_convert_encoding($item, 'UTF-8', 'ISO-8859-1');
            }
            return trim($item);
        }, $dados);

        // Mapear colunas
        // ID_EMPRESA;DEPTO;NOME;SOBRENOME;CARGO;SEXO;EMAIL;DDD;TEL;CELULAR;RAMAL;LINKEDIN;STATUS_CONTATO
        $id_empresa = trim($dados[0] ?? '');
        $depto = trim($dados[1] ?? '');
        $nome = trim($dados[2] ?? '');
        $sobrenome = trim($dados[3] ?? '');
        $cargo = trim($dados[4] ?? '');
        $sexo = trim($dados[5] ?? '');
        $email = trim($dados[6] ?? '');
        $ddd = trim($dados[7] ?? '');
        $tel = trim($dados[8] ?? '');
        $celular = trim($dados[9] ?? '');
        $ramal = trim($dados[10] ?? '');
        $linkedin = trim($dados[11] ?? '');
        $status_contato = trim($dados[12] ?? '');

        // Validações básicas
        if (empty($id_empresa)) { $erros[] = "Linha $linha_num: ID_EMPRESA vazio"; continue; }
        if (!ctype_digit($id_empresa)) { $erros[] = "Linha $linha_num: ID_EMPRESA inválido"; continue; }

        $id_empresa_int = (int)$id_empresa;
        if (!isset($ids_empresa_base[$id_empresa_int])) {
            $erros[] = "Linha $linha_num: ID_EMPRESA $id_empresa não pertence à base \"$base_importacao\"";
            continue;
        }

        $stmt_insert->bind_param('issssssssssss',
            $id_empresa_int, $depto, $nome, $sobrenome, $cargo, $sexo, $email, $ddd, $tel, $celular, $ramal, $linkedin, $status_contato
        );
        if (!$stmt_insert->execute()) {
            $erros[] = "Linha $linha_num: Erro ao salvar - " . $stmt_insert->error;
            continue;
        }

        $total_importados++;
    }

    $stmt_insert->close();
    $conn->commit();
} catch (Exception $e) {
    $conn->rollback();
    fclose($handle);
    $conn->close();
    header('Location: empresas.php?msg=erro_importacao_contatos&detalhe=' . urlencode($e->getMessage()) . '&total=' . $total_importados . '&base=' . urlencode($base_importacao));
    exit;
}

fclose($handle);
$conn->close();

// Redirecionar para empresas com resultado
if (count($erros) > 0) {
    $msg_erro = implode('; ', array_slice($erros, 0, 3));
    header('Location: empresas.php?msg=erro_importacao_contatos&detalhe=' . urlencode($msg_erro) . '&total=' . $total_importados . '&base=' . urlencode($base_importacao));
} else {
    header('Location: empresas.php?msg=importacao_contatos_sucesso&total=' . $total_importados . '&base=' . urlencode($base_importacao));
}
exit;
