<?php
include "../configuracao/conexao.php"; 

header('Content-Type: application/json');

// Ativa o modo de exceção para garantir que o rollback funcione
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

$targetId = $_POST['id'] ?? null;

if (!$targetId) {
    echo json_encode(['success' => false, 'message' => 'Nenhum pedido definido.']);
    exit;
}

try {
    // Define o filtro: processa um pedido específico ou todos os que estão em aberto ('A')
    $sqlFiltro = ($targetId === 'todos') ? "ped_cab_status = 'A'" : "codigo = " . intval($targetId);
    $result = $mysqli->query("SELECT * FROM ped_cab WHERE $sqlFiltro");

    if ($result->num_rows === 0) {
        echo json_encode(['success' => false, 'message' => 'Nada para processar.']);
        exit;
    }

    $mysqli->begin_transaction();
    $convertidos = 0;

    while ($ped = $result->fetch_assoc()) {
        $id_ped = $ped['codigo'];

        // --- INÍCIO DA LIMPEZA (OPCIONAL) ---
        // Remove Notas Fiscais já geradas por este pedido para evitar duplicidade no re-processamento
        $resOld = $mysqli->query("SELECT codigo FROM nf_cab WHERE nf_ped_cab_origem = $id_ped");
        while ($old = $resOld->fetch_assoc()) {
            $oldId = $old['codigo'];
            $mysqli->query("DELETE FROM nf_itens WHERE nf_itens_nf_cab = $oldId");
            $mysqli->query("DELETE FROM nf_cab WHERE codigo = $oldId");
        }
        // --- FIM DA LIMPEZA ---

        // 1. Inserir Cabeçalho da NF (nf_cab) baseando-se no ped_cab
        $stmtCab = $mysqli->prepare("INSERT INTO nf_cab (
            ativo, enumsistema, data, 
            nf_cab_cod_part, nf_cab_nome, nf_cab_dt_emi, 
            nf_cab_tot_itens_00, nf_cab_tot_itens_09, nf_cab_tot_nf, 
            nf_ped_cab_origem, nf_cab_c_v, nf_cab_status
        ) VALUES (?, ?, CURDATE(), ?, ?, ?, ?, ?, ?, ?, ?, 'P')");

        $stmtCab->bind_param("ssssssssis", 
            $ped['ativo'], 
            $ped['enumsistema'], 
            $ped['ped_cab_cod_part'], 
            $ped['ped_cab_nome'],
            $ped['ped_cab_dt_emi'],
            $ped['ped_cab_tot_itens_00'], 
            $ped['ped_cab_tot_itens_09'], 
            $ped['ped_cab_tot_ped'],
            $id_ped, 
            $ped['ped_cab_c_v']
        );
        $stmtCab->execute();
        
        $nova_nf_id = $mysqli->insert_id;

        // 2. Inserir Itens da NF (nf_itens) baseando-se no ped_itens
        $queryItens = "INSERT INTO nf_itens (
            ativo, enumsistema, data, 
            nf_itens_cod_item, nf_itens_descr_item, nf_itens_unid,
            nf_itens_tipo_item, nf_itens_qtd_item, nf_itens_vl_item, 
            nf_itens_tot_item, nf_itens_nf_cab, nf_itens_nf
        )
        SELECT 
            ativo, enumsistema, CURDATE(), 
            ped_itens_cod_item, ped_itens_descr_item, ped_itens_unid,
            ped_itens_tipo_item, ped_itens_qtd_item, ped_itens_vl_item, 
            ped_itens_tot_item, ?, 'S'
        FROM ped_itens WHERE ped_itens_ped_cab = ?";
        
        $stmtItens = $mysqli->prepare($queryItens);
        $stmtItens->bind_param("ii", $nova_nf_id, $id_ped);
        $stmtItens->execute();

        // 3. Atualizar status do Pedido Original
        // Marca os itens do pedido como faturados e o cabeçalho como 'F' (Finalizado)
        $mysqli->query("UPDATE ped_itens SET ped_itens_nf = 'S' WHERE ped_itens_ped_cab = $id_ped");
        $mysqli->query("UPDATE ped_cab SET ped_cab_status = 'F' WHERE codigo = $id_ped");

        $convertidos++;
    }

    $mysqli->commit();
    echo json_encode(['success' => true, 'message' => "Processado com sucesso! $convertidos pedido(s) convertido(s) em NF."]);

} catch (Exception $e) {
    if (isset($mysqli)) $mysqli->rollback();
    echo json_encode(['success' => false, 'message' => "Erro na transação: " . $e->getMessage()]);
}
?>