<?php
require_once '../5_config/config.php';
$usuario = verificarAuth();
$db = getDB();
$perfil = $usuario['perfil'];

// Validar permissão
if (!temPermissao('criar', $perfil)) {
    header('Location: nr12.php?msg=error:Acesso+negado');
    exit;
}

// Capturar dados
$unidade_id = intval($_POST['unidade_id'] ?? 0);
$acao_duplicata = $_POST['acao_duplicata'] ?? 'pular';

// Validar unidade
if ($unidade_id <= 0) {
    header('Location: nr12.php?msg=error:Selecione+uma+unidade');
    exit;
}

if (!temAcessoUnidade($unidade_id, $usuario['id'], $perfil)) {
    header('Location: nr12.php?msg=error:Acesso+negado+a+esta+unidade');
    exit;
}

// Validar arquivo
if (!isset($_FILES['arquivo_excel']) || $_FILES['arquivo_excel']['error'] !== UPLOAD_ERR_OK) {
    header('Location: nr12.php?msg=error:Erro+ao+fazer+upload+do+arquivo');
    exit;
}

$file = $_FILES['arquivo_excel'];
$ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));

if ($ext !== 'csv' && $ext !== 'xlsx') {
    header('Location: nr12.php?msg=error:Arquivo+deve+ser+CSV+ou+XLSX');
    exit;
}

if ($file['size'] > 5 * 1024 * 1024) {
    header('Location: nr12.php?msg=error:Arquivo+muito+grande+(máximo+5+MB)');
    exit;
}

// Processar arquivo
$resultados = [
    'total' => 0,
    'sucesso' => 0,
    'erro' => 0,
    'atualizado' => 0,
    'mensagens' => []
];

if ($ext === 'csv') {
    // Processar CSV
    $handle = fopen($file['tmp_name'], 'r');
    if (!$handle) {
        header('Location: nr12.php?msg=error:Erro+ao+abrir+arquivo');
        exit;
    }

    // Pular BOM se existir
    $bom = fread($handle, 3);
    if ($bom !== "\xEF\xBB\xBF") {
        rewind($handle);
    }

    // Ler cabeçalhos
    $headers = fgetcsv($handle, 0, ';');
    if (!$headers) {
        fclose($handle);
        header('Location: nr12.php?msg=error:Arquivo+vazio');
        exit;
    }

    // Mapear colunas
    $col_map = [];
    $expected_cols = ['Código', 'TAG', 'Nome', 'Unidade', 'Família', 'Categoria Risco', 
                      'Projeto/Conceito', 'Execução', 'Procedimento', 'Validação', 'Laudos',
                      'Data Início', 'Data Conclusão', 'Observações'];
    
    foreach ($headers as $idx => $header) {
        $header = trim($header);
        foreach ($expected_cols as $col) {
            if (stripos($header, str_replace('/', '', $col)) !== false || 
                stripos($header, $col) !== false) {
                $col_map[$col] = $idx;
                break;
            }
        }
    }

    // Processar linhas
    $row_num = 2;
    while (($row = fgetcsv($handle, 0, ';')) !== false) {
        if (empty(array_filter($row))) continue; // Pular linhas vazias
        
        $resultados['total']++;

        // Capturar dados
        $codigo = isset($col_map['Código']) ? trim($row[$col_map['Código']] ?? '') : '';
        $tag = isset($col_map['TAG']) ? trim($row[$col_map['TAG']] ?? '') : '';
        $nome = isset($col_map['Nome']) ? trim($row[$col_map['Nome']] ?? '') : '';
        $familia = isset($col_map['Família']) ? trim($row[$col_map['Família']] ?? '') : '';
        $cat_risco = isset($col_map['Categoria Risco']) ? trim($row[$col_map['Categoria Risco']] ?? '') : '';
        $proj = isset($col_map['Projeto/Conceito']) ? (strtolower(trim($row[$col_map['Projeto/Conceito']] ?? '')) === 'sim' ? 1 : 0) : 0;
        $exec = isset($col_map['Execução']) ? (strtolower(trim($row[$col_map['Execução']] ?? '')) === 'sim' ? 1 : 0) : 0;
        $proc = isset($col_map['Procedimento']) ? (strtolower(trim($row[$col_map['Procedimento']] ?? '')) === 'sim' ? 1 : 0) : 0;
        $valid = isset($col_map['Validação']) ? (strtolower(trim($row[$col_map['Validação']] ?? '')) === 'sim' ? 1 : 0) : 0;
        $laudos = isset($col_map['Laudos']) ? (strtolower(trim($row[$col_map['Laudos']] ?? '')) === 'sim' ? 1 : 0) : 0;
        $data_ini = isset($col_map['Data Início']) ? trim($row[$col_map['Data Início']] ?? '') : '';
        $data_prev = isset($col_map['Data Conclusão']) ? trim($row[$col_map['Data Conclusão']] ?? '') : '';
        $obs = isset($col_map['Observações']) ? trim($row[$col_map['Observações']] ?? '') : '';

        // Converter datas DD/MM/YYYY para YYYY-MM-DD
        if ($data_ini && preg_match('/^\d{1,2}\/\d{1,2}\/\d{4}$/', $data_ini)) {
            [$d, $m, $y] = explode('/', $data_ini);
            $data_ini = sprintf('%04d-%02d-%02d', $y, $m, $d);
        } elseif (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $data_ini)) {
            $data_ini = null;
        }

        if ($data_prev && preg_match('/^\d{1,2}\/\d{1,2}\/\d{4}$/', $data_prev)) {
            [$d, $m, $y] = explode('/', $data_prev);
            $data_prev = sprintf('%04d-%02d-%02d', $y, $m, $d);
        } elseif (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $data_prev)) {
            $data_prev = null;
        }

        // Validar obrigatórios
        if (empty($nome)) {
            $resultados['erro']++;
            $resultados['mensagens'][] = "Linha $row_num: Nome é obrigatório";
            $row_num++;
            continue;
        }

        // Verificar se existe
        $stmt_existe = $db->prepare(
            "SELECT id FROM equipamentos WHERE unidade_id = ? AND cod = ?"
        );
        $stmt_existe->execute([$unidade_id, $codigo]);
        $existe = $stmt_existe->fetch();

        if ($existe && $acao_duplicata === 'pular') {
            $resultados['mensagens'][] = "Linha $row_num: Equipamento $codigo já existe (pulado)";
            $row_num++;
            continue;
        }

        // Inserir ou atualizar
        try {
            if ($existe && $acao_duplicata === 'atualizar') {
                // UPDATE
                $db->prepare(
                    "UPDATE equipamentos SET tag=?, nome=?, familia=?, cat_risco=?, 
                     proj_conceito=?, execucao=?, procedimento=?, validacao=?, laudos=?,
                     data_inicio=?, data_prev_conclusao=?, observacoes=? WHERE id=?"
                )->execute([$tag, $nome, $familia, $cat_risco, $proj, $exec, $proc, $valid, 
                           $laudos, $data_ini, $data_prev, $obs, $existe['id']]);
                $resultados['atualizado']++;
            } else {
                // INSERT
                if (empty($codigo)) {
                    // Gerar código automático
                    $stmt_max = $db->query("SELECT MAX(id) as max_id FROM equipamentos");
                    $max = $stmt_max->fetch();
                    $novo_id = ($max['max_id'] ?? 0) + 1;
                    $codigo = 'EQ-' . str_pad($novo_id, 4, '0', STR_PAD_LEFT);
                }

                $db->prepare(
                    "INSERT INTO equipamentos (unidade_id, cod, tag, nome, familia, cat_risco,
                     proj_conceito, execucao, procedimento, validacao, laudos,
                     data_inicio, data_prev_conclusao, observacoes)
                     VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
                )->execute([$unidade_id, $codigo, $tag, $nome, $familia, $cat_risco,
                           $proj, $exec, $proc, $valid, $laudos, $data_ini, $data_prev, $obs]);

                $novo_id = $db->lastInsertId();

                // Gerar QR Code automaticamente
                $codigo_qr = 'EQ' . str_pad($novo_id, 6, '0', STR_PAD_LEFT);
                $url_qr = APP_URL . '/equipamento_qr.php?codigo=' . $codigo_qr . '&tipo=nr12';
                $db->prepare(
                    "INSERT IGNORE INTO equipamento_qrcodes (equipamento_id, codigo_unico, url_publica)
                     VALUES (?, ?, ?)"
                )->execute([$novo_id, $codigo_qr, $url_qr]);

                $resultados['sucesso']++;
            }
        } catch (Exception $e) {
            $resultados['erro']++;
            $resultados['mensagens'][] = "Linha $row_num: Erro ao processar - " . $e->getMessage();
        }

        $row_num++;
    }

    fclose($handle);
}

// Registrar auditoria
Auditoria::criar('equipamentos_import', 0,
    ['unidade_id' => $unidade_id, 'total' => $resultados['total'], 
     'sucesso' => $resultados['sucesso'], 'atualizado' => $resultados['atualizado'],
     'erro' => $resultados['erro']],
    "Importação de equipamentos NR12: " . $resultados['sucesso'] . " inseridos, " . 
    $resultados['atualizado'] . " atualizados");

// Montar mensagem
$msg = "success:Importação+concluída:+" . $resultados['sucesso'] . "+inseridos,+" . 
       $resultados['atualizado'] . "+atualizados,+" . $resultados['erro'] . "+erros";

header('Location: nr12.php?msg=' . urlencode($msg));
exit;
?>
