<?php
/**
 * ARQUIVO: processar_nf.php
 */
include '../config.php';
include '../configuracao/conexao.php';

$V = "nf";

// --- 1. AÇÃO DE EXCLUSÃO ---
if (isset($_GET['acao']) && $_GET['acao'] === 'excluir' && isset($_GET['id'])) {
    $id_excluir = intval($_GET['id']);
    $mysqli->begin_transaction();
    try {
        $mysqli->query("DELETE FROM nf_itens WHERE nf_itens_nf_cab = $id_excluir");
        $mysqli->query("DELETE FROM reg_h010_mov WHERE reg_h010_mov_num_doc = $id_excluir AND reg_h010_mov_tipo_doc='NFE'");
        $mysqli->query("DELETE FROM nf_cab WHERE codigo = $id_excluir");
        $mysqli->commit();
        header("Location: busca_nf.php?msg=excluido");
        exit;
    } catch (Exception $e) {
        $mysqli->rollback();
        die("Erro ao excluir: " . $e->getMessage());
    }
}

// --- 2. AÇÃO DE SALVAR / ATUALIZAR ---
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $mysqli->begin_transaction();
    try {
        $id         = intval($_POST['codigo'] ?? 0);
        $part       = $_POST['nf_cab_cod_part'] ?? '';
        $nome       = $_POST['nf_cab_nome'] ?? '';
        $data_emi   = $_POST['nf_cab_dt_emi'] ?? date('Y-m-d');
        $status     = $_POST['nf_cab_status'] ?? 'A';
        $cod_ve     = $_POST['nf_cab_cod_veiculo'] ?? '';
        $desc_ve    = $_POST['nf_cab_desc_veiculo'] ?? '';
        $nf_cab_c_v = $_POST['nf_cab_c_v'] ?? ''; // 'S' para Saída, 'E' para Entrada

        $itens_para_salvar = [];
        $soma_total_geral  = 0;

        if (isset($_POST['item_cod'])) {
            foreach ($_POST['item_cod'] as $k => $cod_item) {
                if (empty($cod_item)) continue;
                
                $qtd   = floatval($_POST['item_qtd'][$k]); 
                $valor = floatval($_POST['item_vl'][$k]);
                $desc  = floatval($_POST['item_desc'][$k]);
                $total_item = ($qtd * $valor) - $desc;
                $soma_total_geral += $total_item;

                $itens_para_salvar[] = [
                    'cod'   => $cod_item,
                    'descr' => $_POST['item_descr'][$k],
                    'qtd'   => $qtd,
                    'vl'    => $valor,
                    'desc'  => $desc,
                    'tot'   => $total_item,
                    'marca' => $_POST['item_marca'][$k],
                    'unid'  => $_POST['item_unid'][$k],
                    'tipo'  => $_POST['item_tipo'][$k]
                ];
            }
        }

        // --- GRAVAÇÃO DO CABEÇALHO ---
        if ($id > 0) {
            $sql_cab = "UPDATE nf_cab SET nf_cab_cod_part=?, nf_cab_nome=?, nf_cab_dt_emi=?, nf_cab_tot_nf=?, nf_cab_status=?, nf_cab_cod_veiculo=?, nf_cab_desc_veiculo=?, nf_cab_c_v=? WHERE codigo=?";
            $stmt = $mysqli->prepare($sql_cab);
            $stmt->bind_param("sssssisss", $part, $nome, $data_emi, $soma_total_geral, $status, $cod_ve, $desc_ve, $nf_cab_c_v, $id);
            $stmt->execute();
            
            // Limpa dados antigos para reinserção correta
            $mysqli->query("DELETE FROM nf_itens WHERE nf_itens_nf_cab = $id");
            $mysqli->query("DELETE FROM reg_h010_mov WHERE reg_h010_mov_num_doc = $id AND reg_h010_mov_tipo_doc = 'NFE'");
            $id_vincular = $id;
        } else {
            $sql_cab = "INSERT INTO nf_cab (ativo, data, nf_cab_cod_part, nf_cab_nome, nf_cab_dt_emi, nf_cab_tot_nf, nf_cab_status, nf_cab_cod_veiculo, nf_cab_desc_veiculo, nf_cab_c_v) VALUES ('S', NOW(), ?, ?, ?, ?, ?, ?, ?, ?)";
            $stmt = $mysqli->prepare($sql_cab);
            $stmt->bind_param("ssssssss", $part, $nome, $data_emi, $soma_total_geral, $status, $cod_ve, $desc_ve, $nf_cab_c_v);
            $stmt->execute();
            $id_vincular = $mysqli->insert_id; 
        }

        // --- GRAVAÇÃO DOS ITENS E MOVIMENTAÇÃO H010 ---
        $sql_item = "INSERT INTO nf_itens (ativo, data, nf_itens_nf_cab, nf_itens_cod_item, nf_itens_descr_item, nf_itens_qtd_item, nf_itens_vl_item, nf_itens_desc_item_vl, nf_itens_tot_item, nf_itens_marca_item, nf_itens_unid, nf_itens_tipo_item) VALUES ('S', NOW(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
        $stmt_item = $mysqli->prepare($sql_item);

        $sql_h010 = "INSERT INTO reg_h010_mov (ativo, data, reg_h010_mov_tipo_doc, reg_h010_mov_num_doc, reg_h010_mov_qtd_doc, reg_h010_mov_cod_item, reg_h010_mov_origem_doc, reg_h010_mov_dest_doc, reg_h010_mov_item) VALUES ('S', NOW(), 'NFE', ?, ?, ?, ?, ?, ?)";
        $stmt_h010 = $mysqli->prepare($sql_h010);

        foreach ($itens_para_salvar as $it) {
            // 1. Grava o Item
            $stmt_item->bind_param("issddddsss", $id_vincular, $it['cod'], $it['descr'], $it['qtd'], $it['vl'], $it['desc'], $it['tot'], $it['marca'], $it['unid'], $it['tipo']);
            $stmt_item->execute();

            // 2. Define Origem e Destino baseado no Tipo da Nota (Correção do NULL)
            if ($nf_cab_c_v == 'S') {
                $origem = 'EST'; $destino = 'NFE'; $mov_tipo = 'S';
            } else {
                $origem = 'NFE'; $destino = 'EST'; $mov_tipo = 'E';
            }

            // 3. Grava o Estoque para este item específico
            $stmt_h010->bind_param("idssss", $id_vincular, $it['qtd'], $it['cod'], $origem, $destino, $mov_tipo);
            $stmt_h010->execute();
        }

        $mysqli->commit();
        echo "<script>alert('Nota Fiscal $id_vincular processada com sucesso!'); window.location.href='index.php';</script>";

    } catch (Exception $e) {
        $mysqli->rollback();
        die("Erro Crítico: " . $e->getMessage());
    }
}
?>