<?php  session_start();
if (!isset($_SESSION['id'])) { header("Location: ../index/index.php"); exit(); }
?>

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

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

// Ativa o modo de exceção para garantir o rollback em erros de SQL
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

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

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

try {
    // Define o filtro: um único orçamento ou processamento em lote (status Pendente)
    $sqlFiltro = ($targetId === 'todos') ? "orc_cab_status = 'P'" : "codigo = " . intval($targetId);
    $result = $mysqli->query("SELECT * FROM orc_cab WHERE $sqlFiltro");

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

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

    while ($orc = $result->fetch_assoc()) {
        $id_orc = $orc['codigo'];

        // --- 1. LIMPEZA DE RE-PROCESSAMENTO ---
        // Se já existia um pedido para este orçamento, removemos os rastros antes de gerar o novo
        $resOld = $mysqli->query("SELECT codigo FROM ped_cab WHERE ped_orc_cab_origem = $id_orc");
        while ($old = $resOld->fetch_assoc()) {
            $oldId = $old['codigo'];
            $mysqli->query("DELETE FROM reg_h010_mov WHERE reg_h010_mov_num_doc = $oldId AND reg_h010_mov_tipo_doc = 'PED'");
            $mysqli->query("DELETE FROM ped_itens WHERE ped_itens_ped_cab = $oldId");
            $mysqli->query("DELETE FROM ped_cab WHERE codigo = $oldId");
        }

        // --- 2. INSERIR CABEÇALHO DO PEDIDO ---
        $stmtCab = $mysqli->prepare("INSERT INTO ped_cab (
            ativo, enumsistema, data, ped_cab_cod_part, ped_cab_nome, 
            ped_cab_dt_emi, ped_cab_tot_ped, ped_orc_cab_origem, 
            ped_cab_c_v, ped_cab_cod_veiculo, ped_cab_desc_veiculo, ped_cab_status
        ) VALUES (?, ?, CURDATE(), ?, ?, ?, ?, ?, ?, ?, ?, 'P')");

        $stmtCab->bind_param("sssssdssss", 
            $orc['ativo'], $orc['enumsistema'], $orc['orc_cab_cod_part'], $orc['orc_cab_nome'],
            $orc['orc_cab_dt_emi'], $orc['orc_cab_tot_orc'], $id_orc, 
            $orc['orc_cab_c_v'], $orc['orc_cab_cod_veiculo'], $orc['orc_cab_desc_veiculo']
        );
        $stmtCab->execute();
        $novo_pedido_id = $mysqli->insert_id;

        // --- 3. LÓGICA DE MOVIMENTAÇÃO DE ESTOQUE (H010) ---
        // Definimos origem/destino com base no tipo de operação (C ou S)
        if ($orc['orc_cab_c_v'] == 'S') {
            $origem = 'EST'; $destino = 'PED'; $mov_tipo = 'S';
        } else {
            $origem = 'PED'; $destino = 'EST'; $mov_tipo = 'E';
        }

        $queryMov = "INSERT INTO reg_h010_mov (
            ativo, enumsistema, 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
        )
        SELECT 
            ativo, enumsistema, CURDATE(), 'PED', ?, 
            orc_itens_qtd_item, orc_itens_cod_item, ?, ?, ?
        FROM orc_itens WHERE orc_itens_orc_cab = ?";
        
        $stmtMov = $mysqli->prepare($queryMov);
        $stmtMov->bind_param("issss", $novo_pedido_id, $origem, $destino, $mov_tipo, $id_orc);
        $stmtMov->execute();

        // --- 4. INSERIR ITENS DO PEDIDO ---
        $queryItens = "INSERT INTO ped_itens (
            ativo, enumsistema, data, ped_itens_cod_item, ped_itens_descr_item, 
            ped_itens_unid, ped_itens_marca_item, ped_itens_tipo_item,
            ped_itens_qtd_item, ped_itens_vl_item, ped_itens_tot_item, ped_itens_ped_cab
        )
        SELECT 
            ativo, enumsistema, CURDATE(), orc_itens_cod_item, orc_itens_descr_item, 
            orc_itens_unid, orc_itens_marca_item, orc_itens_tipo_item,
            orc_itens_qtd_item, orc_itens_vl_item, orc_itens_tot_item, ?
        FROM orc_itens WHERE orc_itens_orc_cab = ?";
        
        $stmtItens = $mysqli->prepare($queryItens);
        $stmtItens->bind_param("ii", $novo_pedido_id, $id_orc);
        $stmtItens->execute();

        // --- 5. FINALIZAÇÃO DO ORÇAMENTO ---
        $mysqli->query("UPDATE orc_itens SET orc_itens_ped = 'S' WHERE orc_itens_orc_cab = $id_orc");
        $mysqli->query("UPDATE orc_cab SET orc_cab_status = 'F' WHERE codigo = $id_orc");

        $convertidos++;
    }

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

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