<?php
// ============================================================
// 🔥 INICIAR BUFFER DE SAÍDA
// ============================================================
ob_start();

// ============================================================
// 🔥 DEFINIR BASE_URL DINAMICAMENTE
// ============================================================
$baseUrl = rtrim(dirname($_SERVER['SCRIPT_NAME']), '/');
define('BASE_URL', $baseUrl);

// ============================================================
// 🔥 CARREGAR NOTA PARA EDIÇÃO (SE REF FOR PASSADO)
// ============================================================
$modo_edicao = false;
$nota_edit = null;
$ref_edicao = isset($_GET['ref']) ? $_GET['ref'] : '';

if (!empty($ref_edicao)) {
    require_once 'includes/funcoes.php';
    $pdo = conectarBanco();
    
    $stmt = $pdo->prepare("
        SELECT 
            n.*,
            e.razao_social as emitente_nome,
            e.cnpj as emitente_cnpj,
            e.inscricao_municipal as emitente_inscricao,
            e.aliquota_iss as emitente_aliquota,
            e.codigo_nbs as emitente_codigo_nbs,
            e.codigo_municipio_prestacao as emitente_municipio,
            e.tipo_retencao_iss as emitente_tipo_retencao,
            e.codigo_opcao_simples_nacional as emitente_regime,
            e.usar_ibs_cbs as emitente_usar_ibs_cbs,
            e.regime_tributario_simples_nacional as emitente_regime_simples,
            e.usar_tributacao_municipal as emitente_usar_tributacao,
            e.usar_inscricao_municipal as emitente_usar_inscricao,
            t.razao_social as tomador_nome,
            t.cnpj as tomador_cnpj,
            t.cpf as tomador_cpf,
            t.email as tomador_email,
            t.telefone as tomador_telefone,
            t.inscricao_municipal as tomador_inscricao,
            end_t.logradouro as tomador_logradouro,
            end_t.numero as tomador_numero,
            end_t.bairro as tomador_bairro,
            end_t.cidade as tomador_cidade,
            end_t.codigo_municipio as tomador_codigo_municipio,
            end_t.uf as tomador_uf,
            end_t.cep as tomador_cep,
            emp.nome as empresa_nome,
            emp.ambiente as empresa_ambiente,
            emp.token as empresa_token,
            emp.id as empresa_id
        FROM notas_fiscais n
        LEFT JOIN emitentes e ON n.emitente_id = e.id
        LEFT JOIN tomadores t ON n.tomador_id = t.id
        LEFT JOIN enderecos end_t ON t.endereco_id = end_t.id
        INNER JOIN empresas emp ON n.empresa_id = emp.id
        WHERE n.ref = ? AND n.status = 'rascunho'
    ");
    $stmt->execute([$ref_edicao]);
    $nota_edit = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if ($nota_edit) {
        $modo_edicao = true;
        $payload = json_decode($nota_edit['payload_enviado'] ?? '{}', true);
        if ($payload) {
            $nota_edit['payload'] = $payload;
        }
    } else {
        $ref_edicao = '';
    }
}

// ============================================================
// 🔥 FUNÇÃO PARA BUSCAR ALÍQUOTA POR MUNICÍPIO
// ============================================================
function buscarAliquotaPorMunicipioSalvar($codigoMunicipio, $pdo) {
    if (empty($codigoMunicipio)) {
        return null;
    }
    $stmt = $pdo->prepare("SELECT aliquota_iss FROM municipios_iss WHERE codigo_municipio = ? AND ativo = 1 LIMIT 1");
    $stmt->execute([$codigoMunicipio]);
    $resultado = $stmt->fetch(PDO::FETCH_ASSOC);
    if ($resultado) {
        return (float)$resultado['aliquota_iss'];
    }
    return null;
}

// ============================================================
// 🔥 APIS
// ============================================================
$isAjax = isset($_GET['action']) || isset($_POST['action']);

if ($isAjax) {
    require_once 'includes/funcoes.php';
    $pdo = conectarBanco();
    
    // API: Buscar configurações do emitente
    if (isset($_GET['action']) && $_GET['action'] === 'buscar_configuracoes_emitente') {
        header('Content-Type: application/json');
        $emitenteId = isset($_GET['emitente_id']) ? (int)$_GET['emitente_id'] : 0;
        
        if (!$emitenteId) {
            echo json_encode(['sucesso' => false, 'erro' => 'Emitente não informado']);
            exit;
        }
        
        $stmt = $pdo->prepare("
            SELECT 
                e.id,
                e.razao_social,
                e.cnpj,
                e.inscricao_municipal,
                e.aliquota_iss,
                e.codigo_nbs,
                e.codigo_municipio_prestacao,
                e.tipo_retencao_iss,
                e.codigo_opcao_simples_nacional,
                e.regime_tributario_simples_nacional,
                e.usar_ibs_cbs,
                e.usar_tributacao_municipal,
                e.usar_inscricao_municipal,
                emp.id as empresa_id,
                emp.nome as empresa_nome,
                emp.ambiente
            FROM emitentes e 
            JOIN empresas emp ON e.empresa_id = emp.id
            WHERE e.id = ? AND e.ativo = 1
        ");
        $stmt->execute([$emitenteId]);
        $emitente = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if (!$emitente) {
            echo json_encode(['sucesso' => false, 'erro' => 'Emitente não encontrado']);
            exit;
        }
        
        echo json_encode(['sucesso' => true, 'emitente' => $emitente]);
        exit;
    }
    
    // API: Buscar emitentes por empresa
    if (isset($_GET['action']) && $_GET['action'] === 'buscar_emitentes') {
        header('Content-Type: application/json');
        $empresaId = isset($_GET['empresa_id']) ? (int)$_GET['empresa_id'] : 0;
        
        if (!$empresaId) {
            echo json_encode(['sucesso' => false, 'erro' => 'Empresa não informada']);
            exit;
        }
        
        $stmt = $pdo->prepare("
            SELECT id, razao_social, cnpj, inscricao_municipal
            FROM emitentes 
            WHERE empresa_id = ? AND ativo = 1
            ORDER BY razao_social
        ");
        $stmt->execute([$empresaId]);
        $emitentes = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
        echo json_encode(['sucesso' => true, 'emitentes' => $emitentes]);
        exit;
    }
    
    // API: Buscar alíquota do município
    if (isset($_GET['action']) && $_GET['action'] === 'buscar_aliquota_municipio') {
        header('Content-Type: application/json');
        $codigoMunicipio = isset($_GET['codigo_municipio']) ? (int)$_GET['codigo_municipio'] : 0;
        
        if (!$codigoMunicipio) {
            echo json_encode(['sucesso' => false, 'erro' => 'Código do município não informado']);
            exit;
        }
        
        $stmt = $pdo->prepare("
            SELECT aliquota_iss 
            FROM municipios_iss 
            WHERE codigo_municipio = ? AND ativo = 1
        ");
        $stmt->execute([$codigoMunicipio]);
        $resultado = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if ($resultado) {
            echo json_encode([
                'sucesso' => true, 
                'aliquota' => (float)$resultado['aliquota_iss']
            ]);
        } else {
            echo json_encode([
                'sucesso' => false, 
                'erro' => 'Município não encontrado na tabela de alíquotas'
            ]);
        }
        exit;
    }
    
    // ============================================================
    // 🔥 API: SALVAR RASCUNHO (CORRIGIDO - IGUAL AO EMITIR)
    // ============================================================
    if (isset($_GET['action']) && $_GET['action'] === 'salvar_rascunho') {
        header('Content-Type: application/json');
        
        $dados = json_decode(file_get_contents('php://input'), true);
        
        if (!$dados) {
            echo json_encode(['sucesso' => false, 'erro' => 'Dados não recebidos']);
            exit;
        }
        
        try {
            // Validar dados obrigatórios
            if (empty($dados['empresa_id'])) {
                echo json_encode(['sucesso' => false, 'erro' => 'Empresa não informada']);
                exit;
            }
            
            if (empty($dados['emitente_id'])) {
                echo json_encode(['sucesso' => false, 'erro' => 'Emitente não informado']);
                exit;
            }
            
            if (empty($dados['tomador_id'])) {
                echo json_encode(['sucesso' => false, 'erro' => 'Tomador não informado']);
                exit;
            }
            
            if (empty($dados['valor_servico']) || $dados['valor_servico'] <= 0) {
                echo json_encode(['sucesso' => false, 'erro' => 'Valor do serviço inválido']);
                exit;
            }
            
            // Buscar dados do emitente
            $stmt = $pdo->prepare("
                SELECT e.*, emp.ambiente, emp.token, emp.nome as empresa_nome
                FROM emitentes e 
                JOIN empresas emp ON e.empresa_id = emp.id 
                WHERE e.id = ? AND e.ativo = 1
            ");
            $stmt->execute([$dados['emitente_id']]);
            $emitente = $stmt->fetch(PDO::FETCH_ASSOC);
            
            if (!$emitente) {
                echo json_encode(['sucesso' => false, 'erro' => 'Emitente não encontrado']);
                exit;
            }
            
            // Buscar dados do tomador
            $stmt = $pdo->prepare("
                SELECT t.*, 
                       end.logradouro, end.numero, end.complemento, end.bairro, end.cidade, end.codigo_municipio, end.uf, end.cep
                FROM tomadores t
                LEFT JOIN enderecos end ON t.endereco_id = end.id
                WHERE t.id = ?
            ");
            $stmt->execute([$dados['tomador_id']]);
            $tomador = $stmt->fetch(PDO::FETCH_ASSOC);
            
            if (!$tomador) {
                echo json_encode(['sucesso' => false, 'erro' => 'Tomador não encontrado']);
                exit;
            }
            
            // Verificar se já existe rascunho com esta referência
            $stmt = $pdo->prepare("
                SELECT id FROM notas_fiscais 
                WHERE ref = ? AND empresa_id = ? AND status = 'rascunho'
            ");
            $stmt->execute([$dados['ref'], $dados['empresa_id']]);
            $rascunhoExistente = $stmt->fetch(PDO::FETCH_ASSOC);
            
            // ============================================================
            // 🔥 APLICAR REGRAS ESPECÍFICAS POR EMPRESA (CORRIGIDO - IGUAL AO EMITIR)
            // ============================================================
            $empresaId = (int)$dados['empresa_id'];
            
            // Valores padrão vindos do emitente
            $aliquotaISS = (float)($emitente['aliquota_iss'] ?? 2.00);
            $codigoNBS = $emitente['codigo_nbs'] ?? '124032200';
            $codigoMunicipioEmitente = 4314902;  // Porto Alegre (padrão)
            $codigoMunicipioPrestacao = (int)($emitente['codigo_municipio_prestacao'] ?? 4303103);
            $tipoRetencaoIss = (int)($emitente['tipo_retencao_iss'] ?? 2);
            $codigoOpcaoSimplesNacional = (int)($emitente['codigo_opcao_simples_nacional'] ?? 3);
            $regimeTributarioSimplesNacional = $emitente['regime_tributario_simples_nacional'] ?? null;
            $usarIbsCbs = (int)($emitente['usar_ibs_cbs'] ?? 1);
            $usarTributacaoMunicipal = (int)($emitente['usar_tributacao_municipal'] ?? 1);
            $usarInscricaoMunicipal = (int)($emitente['usar_inscricao_municipal'] ?? 1);
            $inscricaoMunicipal = preg_replace('/[^0-9]/', '', $emitente['inscricao_municipal'] ?? '');
            
            // Sobrescrever com dados do formulário (APENAS se enviados)
            if (!empty($dados['aliquota']) && $dados['aliquota'] > 0) {
                $aliquotaISS = (float)$dados['aliquota'];
            }
            if (!empty($dados['codigo_nbs'])) {
                $codigoNBS = $dados['codigo_nbs'];
            }
            if (!empty($dados['municipio_prestacao'])) {
                $codigoMunicipioPrestacao = (int)$dados['municipio_prestacao'];
            }
            if (!empty($dados['tipo_retencao_iss'])) {
                $tipoRetencaoIss = (int)$dados['tipo_retencao_iss'];
            }
            
            // ============================================================
            // 🔥 REGRAS ESPECÍFICAS POR EMPRESA (IGUAL AO emitir.php)
            // ============================================================
            
            // TIRENTULHO (ID 1) - Porto Alegre - Optante Simples Nacional
            if ($empresaId == 1) {
                $codigoNBS = "124033200";                    // Coleta de resíduos
                $codigoMunicipioEmitente = 4314902;          // Porto Alegre
                $codigoMunicipioPrestacao = (int)($emitente['codigo_municipio_prestacao'] ?? 4303103); // Cachoeirinha
                $tipoRetencaoIss = 2;                        // Retido pelo Tomador
                $regimeTributarioSimplesNacional = 1;
                $usarTributacaoMunicipal = 0;
                $usarInscricaoMunicipal = 0;
                $usarIbsCbs = 0;
                $codigoOpcaoSimplesNacional = 3;             // ✅ Optante Simples Nacional
            }
            
            // TR (ID 2) - Canoas Regime Normal
            if ($empresaId == 2) {
                $codigoNBS = "124032200";
                $codigoMunicipioEmitente = 4304606;          // Canoas
                $codigoMunicipioPrestacao = 4304606;         // Canoas
                $tipoRetencaoIss = 2;
                $regimeTributarioSimplesNacional = null;
                $usarTributacaoMunicipal = 1;
                $usarInscricaoMunicipal = 1;
                $usarIbsCbs = 1;
                $codigoOpcaoSimplesNacional = 1;             // Não optante
            }
            
            // RECILUX (ID 3) - Canoas Optante Simples Nacional
            if ($empresaId == 3) {
                $codigoNBS = "124033200";
                $codigoMunicipioEmitente = 4304606;          // Canoas
                $codigoMunicipioPrestacao = 4304606;         // Canoas
                $tipoRetencaoIss = 2;
                $regimeTributarioSimplesNacional = 1;
                $usarTributacaoMunicipal = 1;
                $usarInscricaoMunicipal = 1;
                $usarIbsCbs = 1;
                $codigoOpcaoSimplesNacional = 3;             // Optante SN
            }
            
            // 🔥 BUSCAR ALÍQUOTA DO MUNICÍPIO DE PRESTAÇÃO
            $aliquotaMunicipio = buscarAliquotaPorMunicipioSalvar($codigoMunicipioPrestacao, $pdo);
            if ($aliquotaMunicipio !== null && $aliquotaMunicipio > 0) {
                $aliquotaISS = $aliquotaMunicipio;
            }
            
            // ============================================================
            // 🔥 CALCULAR VALORES
            // ============================================================
            $valor_servico = (float)$dados['valor_servico'];
            $valor_iss = round(($valor_servico * $aliquotaISS) / 100, 2);
            
            $pis_retido = 0;
            $cofins_retido = 0;
            $csll_retido = 0;
            $irrf_retido = 0;
            $valor_ibs = 0;
            $valor_cbs = 0;
            
            $valor_liquido = $valor_servico;
            
            if ($tipoRetencaoIss == 2 || $tipoRetencaoIss == 3) {
                $valor_liquido = $valor_servico - $valor_iss;
                
                if ($usarIbsCbs == 1) {
                    $base_ibs_cbs = $valor_servico - $valor_iss;
                    $valor_ibs = ($base_ibs_cbs * 0.10) / 100;
                    $valor_cbs = ($base_ibs_cbs * 0.90) / 100;
                    $valor_liquido = $valor_liquido - $valor_ibs - $valor_cbs;
                }
                
                $base_retencoes = $valor_servico;
                $pis_retido = ($base_retencoes * 0.65) / 100;
                $cofins_retido = ($base_retencoes * 3.00) / 100;
                $csll_retido = ($base_retencoes * 1.00) / 100;
                $irrf_retido = ($base_retencoes * 1.50) / 100;
                
                $valor_liquido = $valor_liquido - $pis_retido - $cofins_retido - $csll_retido - $irrf_retido;
            }
            
            $valor_liquido = round($valor_liquido, 2);
            
            // ============================================================
            // 🔥 GERAR DPS
            // ============================================================
            $ano = date('Y');
            $mes = date('m');
            $stmt = $pdo->prepare("
                SELECT COUNT(*) as total FROM notas_fiscais 
                WHERE numero_dps IS NOT NULL 
                AND numero_dps LIKE ?
            ");
            $stmt->execute(["DPS{$ano}{$mes}%"]);
            $total = $stmt->fetch(PDO::FETCH_ASSOC);
            $sequencial = str_pad($total['total'] + 1, 6, '0', STR_PAD_LEFT);
            $numero_dps = "DPS{$ano}{$mes}{$sequencial}";
            $serie_dps = "001";
            
            // ============================================================
            // 🔥 MONTAR PAYLOAD (CORRIGIDO - IGUAL AO EMITIR)
            // ============================================================
            $dataEmissao = date('Y-m-d\TH:i:sP');
            $dataCompetencia = date('Y-m-d');
            
            $cnpjPrestador = preg_replace('/[^0-9]/', '', $emitente['cnpj']);
            
            $cnpjTomador = null;
            $cpfTomador = null;
            if (!empty($tomador['cnpj'])) {
                $cnpjTomador = preg_replace('/[^0-9]/', '', $tomador['cnpj']);
            } elseif (!empty($tomador['cpf'])) {
                $cpfTomador = preg_replace('/[^0-9]/', '', $tomador['cpf']);
            }
            
            $descricao = $dados['descricao'] ?? '';
            if (!empty($dados['observacoes'])) {
                $descricao .= "\n\n" . trim($dados['observacoes']);
            }
            if (strlen($descricao) > 2000) {
                $descricao = substr($descricao, 0, 1997) . '...';
            }
            
            $codigoServicoRaw = $dados['codigo_servico'] ?? '';
            $codigoServicoNumerico = preg_replace('/[^0-9]/', '', $codigoServicoRaw);
            
            if (strlen($codigoServicoNumerico) == 4) {
                $codigoServico = $codigoServicoNumerico . '01';
            } elseif (strlen($codigoServicoNumerico) == 6) {
                $codigoServico = $codigoServicoNumerico;
            } elseif (strlen($codigoServicoNumerico) > 6) {
                $codigoServico = substr($codigoServicoNumerico, 0, 6);
            } else {
                $codigoServico = str_pad($codigoServicoNumerico, 6, '0', STR_PAD_RIGHT);
            }
            $codigoServico = sprintf("%06d", (int)$codigoServico);
            
            // MONTAR PAYLOAD BASE (CORRIGIDO)
            $payload = [
                "data_emissao" => $dataEmissao,
                "data_competencia" => $dataCompetencia,
                "codigo_municipio_emissora" => $codigoMunicipioEmitente,      // Porto Alegre
                "cnpj_prestador" => $cnpjPrestador,
                "codigo_opcao_simples_nacional" => $codigoOpcaoSimplesNacional,
                "regime_especial_tributacao" => 0,
                "cnpj_tomador" => $cnpjTomador,
                "razao_social_tomador" => substr($tomador['razao_social'], 0, 100),
                "codigo_municipio_tomador" => (int)($tomador['codigo_municipio'] ?? 4303103),
                "cep_tomador" => preg_replace('/[^0-9]/', '', $tomador['cep'] ?? ''),
                "logradouro_tomador" => substr($tomador['logradouro'] ?? '', 0, 100),
                "numero_tomador" => substr($tomador['numero'] ?? 'S/N', 0, 10),
                "complemento_tomador" => substr($tomador['complemento'] ?? '', 0, 50),
                "bairro_tomador" => substr($tomador['bairro'] ?? 'CENTRO', 0, 50),
                "telefone_tomador" => preg_replace('/[^0-9]/', '', $tomador['telefone'] ?? ''),
                "email_tomador" => $tomador['email'] ?? '',
                "codigo_municipio_prestacao" => $codigoMunicipioPrestacao,    // Cachoeirinha
                "codigo_tributacao_nacional_iss" => $codigoServico,
                "descricao_servico" => $descricao,
                "valor_servico" => $valor_servico,
                "tributacao_iss" => 1,
                "tipo_retencao_iss" => (string)$tipoRetencaoIss,
                "codigo_nbs" => $codigoNBS
            ];
            
            if ($usarInscricaoMunicipal && !empty($inscricaoMunicipal)) {
                $payload["inscricao_municipal_prestador"] = $inscricaoMunicipal;
            }
            
            if ($usarTributacaoMunicipal) {
                $payload["codigo_tributacao_municipal_iss"] = "001";
            }
            
            if ($tipoRetencaoIss == 2 || $tipoRetencaoIss == 3) {
                $payload["percentual_aliquota_relativa_municipio"] = number_format($aliquotaISS, 2, '.', '');
                $payload["percentual_total_tributos_municipais"] = number_format($aliquotaISS, 2, '.', '');
                if ($valor_iss > 0) {
                    $payload["valor_iss"] = $valor_iss;
                }
            }
            
            $payload["percentual_total_tributos_federais"] = "0.00";
            $payload["percentual_total_tributos_estaduais"] = "0.00";
            $payload["situacao_tributaria_pis_cofins"] = "00";
            $payload["indicador_total_tributacao"] = null;
            
            if ($regimeTributarioSimplesNacional !== null) {
                $payload["regime_tributario_simples_nacional"] = $regimeTributarioSimplesNacional;
            }
            
            if ($usarIbsCbs) {
                $payload["finalidade_emissao"] = $dados['finalidade_emissao'] ?? "0";
                $payload["consumidor_final"] = $dados['consumidor_final'] ?? "0";
                $payload["codigo_indicador_operacao"] = $dados['codigo_indicador_operacao'] ?? "050102";
                $payload["indicador_destinatario"] = $dados['indicador_destinatario'] ?? "0";
                $payload["ibs_cbs_situacao_tributaria"] = $dados['ibs_cbs_situacao_tributaria'] ?? "000";
                $payload["ibs_cbs_classificacao_tributaria"] = $dados['ibs_cbs_classificacao_tributaria'] ?? "000001";
                $payload["compra_governamental"] = $dados['compra_governamental'] ?? "0";
                $payload["pais_prestacao"] = $dados['pais_prestacao'] ?? "1058";
            }
            
            if ($cpfTomador && !$cnpjTomador) {
                unset($payload['cnpj_tomador']);
                $payload['cpf_tomador'] = $cpfTomador;
            }
            
            // ============================================================
            // 🔥 PREPARAR DADOS PARA INSERÇÃO
            // ============================================================
            $dadosNota = [
                'ref' => $dados['ref'],
                'empresa_id' => (int)$dados['empresa_id'],
                'emitente_id' => (int)$dados['emitente_id'],
                'tomador_id' => (int)$dados['tomador_id'],
                'codigo_servico' => $codigoServico,
                'discriminacao_servico' => $descricao,
                'valor_servico' => $valor_servico,
                'aliquota' => $aliquotaISS,
                'valor_iss' => $valor_iss,
                'valor_liquido' => $valor_liquido,
                'pis_retido' => $pis_retido,
                'cofins_retido' => $cofins_retido,
                'csll_retido' => $csll_retido,
                'irrf_retido' => $irrf_retido,
                'iss_retido' => ($tipoRetencaoIss == 2 || $tipoRetencaoIss == 3) ? 1 : 0,
                'optante_simples_nacional' => ($codigoOpcaoSimplesNacional == 3) ? 1 : 0,
                'data_emissao' => $dados['data_emissao'] ?? date('Y-m-d H:i:s'),
                'data_competencia' => $dados['data_competencia'] ?? date('Y-m-d'),
                'status' => 'rascunho',
                'numero_dps' => $numero_dps,
                'serie_dps' => $serie_dps,
                'payload_enviado' => json_encode($payload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
                'atualizado_em' => date('Y-m-d H:i:s')
            ];
            
            // ============================================================
            // 🔥 INSERIR OU ATUALIZAR RASCUNHO
            // ============================================================
            if ($rascunhoExistente) {
                $sql = "UPDATE notas_fiscais SET 
                    emitente_id = :emitente_id,
                    tomador_id = :tomador_id,
                    codigo_servico = :codigo_servico,
                    discriminacao_servico = :discriminacao_servico,
                    valor_servico = :valor_servico,
                    aliquota = :aliquota,
                    valor_iss = :valor_iss,
                    valor_liquido = :valor_liquido,
                    pis_retido = :pis_retido,
                    cofins_retido = :cofins_retido,
                    csll_retido = :csll_retido,
                    irrf_retido = :irrf_retido,
                    iss_retido = :iss_retido,
                    optante_simples_nacional = :optante_simples_nacional,
                    data_emissao = :data_emissao,
                    data_competencia = :data_competencia,
                    numero_dps = :numero_dps,
                    serie_dps = :serie_dps,
                    status = :status,
                    payload_enviado = :payload_enviado,
                    atualizado_em = :atualizado_em
                WHERE ref = :ref AND empresa_id = :empresa_id AND status = 'rascunho'";
            } else {
                $sql = "INSERT INTO notas_fiscais (
                    ref, empresa_id, emitente_id, tomador_id,
                    codigo_servico, discriminacao_servico, valor_servico,
                    aliquota, valor_iss, valor_liquido,
                    pis_retido, cofins_retido, csll_retido, irrf_retido,
                    iss_retido, optante_simples_nacional,
                    data_emissao, data_competencia,
                    numero_dps, serie_dps,
                    status, payload_enviado, criado_em, atualizado_em
                ) VALUES (
                    :ref, :empresa_id, :emitente_id, :tomador_id,
                    :codigo_servico, :discriminacao_servico, :valor_servico,
                    :aliquota, :valor_iss, :valor_liquido,
                    :pis_retido, :cofins_retido, :csll_retido, :irrf_retido,
                    :iss_retido, :optante_simples_nacional,
                    :data_emissao, :data_competencia,
                    :numero_dps, :serie_dps,
                    :status, :payload_enviado, :criado_em, :atualizado_em
                )";
                
                $dadosNota['criado_em'] = date('Y-m-d H:i:s');
            }
            
            $stmt = $pdo->prepare($sql);
            $stmt->execute($dadosNota);
            
            echo json_encode([
                'sucesso' => true, 
                'mensagem' => 'Rascunho salvo com sucesso!',
                'ref' => $dados['ref'],
                'dados' => [
                    'valor_servico' => $valor_servico,
                    'aliquota' => $aliquotaISS,
                    'valor_iss' => $valor_iss,
                    'valor_liquido' => $valor_liquido,
                    'numero_dps' => $numero_dps,
                    'serie_dps' => $serie_dps,
                    'pis_retido' => $pis_retido,
                    'cofins_retido' => $cofins_retido,
                    'csll_retido' => $csll_retido,
                    'irrf_retido' => $irrf_retido,
                    'iss_retido' => ($tipoRetencaoIss == 2 || $tipoRetencaoIss == 3) ? 1 : 0,
                    'optante_simples_nacional' => ($codigoOpcaoSimplesNacional == 3) ? 1 : 0,
                    'regras_aplicadas' => [
                        'empresa_id' => $empresaId,
                        'codigo_nbs' => $codigoNBS,
                        'codigo_municipio_emissor' => $codigoMunicipioEmitente,
                        'codigo_municipio_prestacao' => $codigoMunicipioPrestacao,
                        'tipo_retencao' => $tipoRetencaoIss,
                        'usar_ibs_cbs' => $usarIbsCbs,
                        'regime_simples' => $regimeTributarioSimplesNacional,
                        'codigo_opcao_simples_nacional' => $codigoOpcaoSimplesNacional
                    ]
                ]
            ]);
            
        } catch (PDOException $e) {
            echo json_encode([
                'sucesso' => false, 
                'erro' => 'Erro ao salvar rascunho: ' . $e->getMessage()
            ]);
        }
        exit;
    }
    
    // 🔥 API: ATUALIZAR RASCUNHO
    if (isset($_GET['action']) && $_GET['action'] === 'atualizar_rascunho') {
        header('Content-Type: application/json');
        
        $dados = json_decode(file_get_contents('php://input'), true);
        
        if (!$dados) {
            echo json_encode(['sucesso' => false, 'erro' => 'Dados não recebidos']);
            exit;
        }
        
        try {
            if (empty($dados['ref'])) {
                echo json_encode(['sucesso' => false, 'erro' => 'Referência não informada']);
                exit;
            }
            
            $stmt = $pdo->prepare("SELECT id FROM notas_fiscais WHERE ref = ? AND status = 'rascunho'");
            $stmt->execute([$dados['ref']]);
            $notaExistente = $stmt->fetch(PDO::FETCH_ASSOC);
            
            if (!$notaExistente) {
                echo json_encode(['sucesso' => false, 'erro' => 'Nota não encontrada ou já emitida']);
                exit;
            }
            
            $stmt = $pdo->prepare("
                SELECT e.*, emp.ambiente, emp.token 
                FROM emitentes e 
                JOIN empresas emp ON e.empresa_id = emp.id 
                WHERE e.id = ? AND e.ativo = 1
            ");
            $stmt->execute([$dados['emitente_id']]);
            $emitente = $stmt->fetch(PDO::FETCH_ASSOC);
            
            if (!$emitente) {
                echo json_encode(['sucesso' => false, 'erro' => 'Emitente não encontrado']);
                exit;
            }
            
            $empresaId = (int)$dados['empresa_id'];
            
            $aliquotaISS = (float)($emitente['aliquota_iss'] ?? 2.00);
            $tipoRetencaoIss = (int)($emitente['tipo_retencao_iss'] ?? 2);
            $codigoOpcaoSimplesNacional = (int)($emitente['codigo_opcao_simples_nacional'] ?? 3);
            $usarIbsCbs = (int)($emitente['usar_ibs_cbs'] ?? 1);
            
            if (!empty($dados['aliquota']) && $dados['aliquota'] > 0) {
                $aliquotaISS = (float)$dados['aliquota'];
            }
            if (!empty($dados['tipo_retencao_iss'])) {
                $tipoRetencaoIss = (int)$dados['tipo_retencao_iss'];
            }
            
            // 🔥 APLICAR REGRAS DA EMPRESA (IGUAL AO EMITIR)
            if ($empresaId == 1) {
                $tipoRetencaoIss = 2;  // Retido pelo Tomador
                $usarIbsCbs = 0;
                $codigoOpcaoSimplesNacional = 3; // Optante SN
            }
            if ($empresaId == 2) {
                $tipoRetencaoIss = 2;
                $usarIbsCbs = 1;
                $codigoOpcaoSimplesNacional = 1; // Não optante
            }
            if ($empresaId == 3) {
                $tipoRetencaoIss = 2;
                $usarIbsCbs = 1;
                $codigoOpcaoSimplesNacional = 3; // Optante SN
            }
            
            $valor_servico = (float)$dados['valor_servico'];
            $valor_iss = round(($valor_servico * $aliquotaISS) / 100, 2);
            
            $pis_retido = 0;
            $cofins_retido = 0;
            $csll_retido = 0;
            $irrf_retido = 0;
            $valor_liquido = $valor_servico;
            
            if ($tipoRetencaoIss == 2 || $tipoRetencaoIss == 3) {
                $valor_liquido = $valor_servico - $valor_iss;
                
                if ($usarIbsCbs == 1) {
                    $base_ibs_cbs = $valor_servico - $valor_iss;
                    $valor_ibs = ($base_ibs_cbs * 0.10) / 100;
                    $valor_cbs = ($base_ibs_cbs * 0.90) / 100;
                    $valor_liquido = $valor_liquido - $valor_ibs - $valor_cbs;
                }
                
                $base_retencoes = $valor_servico;
                $pis_retido = ($base_retencoes * 0.65) / 100;
                $cofins_retido = ($base_retencoes * 3.00) / 100;
                $csll_retido = ($base_retencoes * 1.00) / 100;
                $irrf_retido = ($base_retencoes * 1.50) / 100;
                $valor_liquido = $valor_liquido - $pis_retido - $cofins_retido - $csll_retido - $irrf_retido;
            }
            
            $valor_liquido = round($valor_liquido, 2);
            
            $sql = "UPDATE notas_fiscais SET 
                emitente_id = :emitente_id,
                tomador_id = :tomador_id,
                codigo_servico = :codigo_servico,
                discriminacao_servico = :discriminacao_servico,
                valor_servico = :valor_servico,
                aliquota = :aliquota,
                valor_iss = :valor_iss,
                valor_liquido = :valor_liquido,
                pis_retido = :pis_retido,
                cofins_retido = :cofins_retido,
                csll_retido = :csll_retido,
                irrf_retido = :irrf_retido,
                iss_retido = :iss_retido,
                optante_simples_nacional = :optante_simples_nacional,
                data_emissao = :data_emissao,
                data_competencia = :data_competencia,
                atualizado_em = :atualizado_em
            WHERE ref = :ref AND status = 'rascunho'";
            
            $stmt = $pdo->prepare($sql);
            $stmt->execute([
                'ref' => $dados['ref'],
                'emitente_id' => (int)$dados['emitente_id'],
                'tomador_id' => (int)$dados['tomador_id'],
                'codigo_servico' => $dados['codigo_servico'] ?? '',
                'discriminacao_servico' => $dados['descricao'] ?? '',
                'valor_servico' => $valor_servico,
                'aliquota' => $aliquotaISS,
                'valor_iss' => $valor_iss,
                'valor_liquido' => $valor_liquido,
                'pis_retido' => $pis_retido,
                'cofins_retido' => $cofins_retido,
                'csll_retido' => $csll_retido,
                'irrf_retido' => $irrf_retido,
                'iss_retido' => ($tipoRetencaoIss == 2 || $tipoRetencaoIss == 3) ? 1 : 0,
                'optante_simples_nacional' => ($codigoOpcaoSimplesNacional == 3) ? 1 : 0,
                'data_emissao' => $dados['data_emissao'] ?? date('Y-m-d H:i:s'),
                'data_competencia' => $dados['data_competencia'] ?? date('Y-m-d'),
                'atualizado_em' => date('Y-m-d H:i:s')
            ]);
            
            echo json_encode([
                'sucesso' => true, 
                'mensagem' => 'Rascunho atualizado com sucesso!',
                'ref' => $dados['ref']
            ]);
            
        } catch (PDOException $e) {
            echo json_encode([
                'sucesso' => false, 
                'erro' => 'Erro ao atualizar rascunho: ' . $e->getMessage()
            ]);
        }
        exit;
    }
}

// ============================================================
// 🔥 SE NÃO FOR AJAX, CARREGAR A PÁGINA NORMAL
// ============================================================
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

require_once 'includes/funcoes.php';
include 'includes/header.php';

$pdo = conectarBanco();

// Buscar empresas ativas
$empresas = $pdo->query("SELECT id, nome, token, ambiente, optante_simples FROM empresas WHERE ativo = 1 ORDER BY nome")->fetchAll(PDO::FETCH_ASSOC);

// Pegar empresa selecionada
$empresa_id_selecionada = 0;
if ($modo_edicao && $nota_edit) {
    $empresa_id_selecionada = $nota_edit['empresa_id'];
} else {
    $empresa_id_selecionada = isset($_GET['empresa_id']) ? (int)$_GET['empresa_id'] : ($empresas[0]['id'] ?? 0);
}

// Buscar emitentes da empresa selecionada
$emitentes = [];
if ($empresa_id_selecionada > 0) {
    $stmt = $pdo->prepare("
        SELECT e.id, e.razao_social, e.cnpj, e.inscricao_municipal, e.optante_simples_nacional,
               e.aliquota_iss, e.codigo_nbs, e.codigo_municipio_prestacao,
               e.tipo_retencao_iss, e.codigo_opcao_simples_nacional,
               e.regime_tributario_simples_nacional, e.usar_ibs_cbs,
               end.codigo_municipio, end.cidade, end.uf, end.logradouro as e_logradouro, 
               end.numero as e_numero, end.bairro as e_bairro, end.cep as e_cep
        FROM emitentes e 
        LEFT JOIN enderecos end ON e.endereco_id = end.id 
        WHERE e.empresa_id = ? AND e.ativo = 1 
        ORDER BY e.razao_social
    ");
    $stmt->execute([$empresa_id_selecionada]);
    $emitentes = $stmt->fetchAll(PDO::FETCH_ASSOC);
}

// Buscar tomadores
$tomadores = $pdo->query("
    SELECT t.id, t.razao_social, t.cnpj, t.cpf, t.email, t.telefone, t.inscricao_municipal,
           end.logradouro, end.numero, end.bairro, end.cidade, end.codigo_municipio, end.uf, end.cep 
    FROM tomadores t 
    LEFT JOIN enderecos end ON t.endereco_id = end.id 
    WHERE t.ativo = 1 
    ORDER BY t.razao_social
")->fetchAll(PDO::FETCH_ASSOC);

// Buscar serviços da empresa selecionada
$servicos_disponiveis = [];
if ($empresa_id_selecionada > 0) {
    $stmt = $pdo->prepare("
        SELECT id, codigo, descricao, cnae, aliquota_iss, tributacao, status
        FROM empresa_servicos 
        WHERE empresa_id = ? AND status = 'ativo' 
        ORDER BY codigo
        LIMIT 100
    ");
    $stmt->execute([$empresa_id_selecionada]);
    $servicos_disponiveis = $stmt->fetchAll(PDO::FETCH_ASSOC);
}

// Buscar municípios para o select
$municipios = $pdo->query("
    SELECT codigo_municipio_completo, nome_municipio, uf 
    FROM municipios 
    ORDER BY nome_municipio
    LIMIT 500
")->fetchAll(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title><?php echo $modo_edicao ? 'Editar' : 'Emitir'; ?> NFSe - Sistema Multi-Empresa</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.1/font/bootstrap-icons.css" rel="stylesheet">
    <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
    <link href="https://cdn.jsdelivr.net/npm/select2-bootstrap-5-theme@1.3.0/dist/select2-bootstrap-5-theme.min.css" rel="stylesheet" />
    <style>
        .card-shadow { box-shadow: 0 2px 4px rgba(0,0,0,0.1); }
        .required-field:after { content: " *"; color: red; }
        .toast-container { position: fixed; top: 20px; right: 20px; z-index: 9999; }
        .loading-overlay {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: rgba(0,0,0,0.7);
            z-index: 9998;
            display: none;
            justify-content: center;
            align-items: center;
            flex-direction: column;
        }
        .loading-spinner { width: 60px; height: 60px; border: 5px solid #f3f3f3; border-top: 5px solid #3498db; border-radius: 50%; animation: spin 1s linear infinite; }
        @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
        .info-card { font-size: 0.85rem; line-height: 1.4; }
        .resumo-valor { font-size: 1.2rem; font-weight: bold; color: #28a745; }
        .select2-container--bootstrap-5 .select2-selection { min-height: 38px; }
        .codigo-nbs-correto { background-color: #d4edda; border-color: #c3e6cb; }
        .ibs-cbs-section { background-color: #f8f9fa; border-left: 4px solid #6c757d; padding: 15px; border-radius: 5px; }
        .ibs-cbs-section .form-label { font-weight: 600; color: #495057; }
        .badge-ibs { background-color: #6c757d; color: white; font-size: 0.7rem; }
        .badge-obrigatorio { background-color: #dc3545; color: white; font-size: 0.65rem; }
        .resumo-nota-exato {
            background: white;
            padding: 12px 14px;
            border-radius: 8px;
            border: 1px solid #dee2e6;
            font-size: 0.85rem;
        }
        .resumo-nota-exato .cabecalho-resumo {
            font-weight: 700;
            font-size: 0.9rem;
            border-bottom: 2px solid #007bff;
            padding-bottom: 6px;
            margin-bottom: 10px;
            color: #007bff;
        }
        .resumo-nota-exato .linha-valor {
            display: flex;
            justify-content: space-between;
            padding: 3px 0;
            border-bottom: 1px dashed #e9ecef;
        }
        .resumo-nota-exato .linha-valor:last-child { border-bottom: none; }
        .resumo-nota-exato .label-resumo { color: #6c757d; font-weight: 500; }
        .resumo-nota-exato .valor-resumo { font-weight: 600; color: #212529; }
        .resumo-nota-exato .tributos-box { background-color: #fff3cd; padding: 8px 12px; border-radius: 6px; margin: 6px 0; border-left: 4px solid #ffc107; }
        .resumo-nota-exato .detalhe-tributo { display: flex; justify-content: space-between; padding: 2px 0; font-size: 0.82rem; }
        .resumo-nota-exato .detalhe-tributo .label-tributo { color: #495057; }
        .resumo-nota-exato .detalhe-tributo .valor-tributo { font-weight: 500; }
        .resumo-nota-exato .info-ibs-cbs { background-color: #f8f9fa; padding: 6px 10px; border-radius: 4px; margin: 4px 0; font-size: 0.78rem; }
        .resumo-nota-exato .info-ibs-cbs .linha-info { display: flex; justify-content: space-between; padding: 1px 0; }
        .resumo-nota-exato .total-nota { display: flex; justify-content: space-between; padding: 8px 0 4px 0; border-top: 2px solid #28a745; margin-top: 6px; font-weight: 700; font-size: 1.05rem; color: #28a745; }
        .config-automatica { background-color: #e7f3ff; padding: 4px 10px; border-radius: 4px; font-size: 0.75rem; color: #0066cc; }
        .fonte-config { font-size: 0.7rem; color: #6c757d; margin-top: 2px; }
        .fonte-config i { color: #28a745; }
        .is-invalid { border-color: #dc3545 !important; box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25) !important; }
        .is-invalid:focus { border-color: #dc3545 !important; box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5) !important; }
        .select2-container--bootstrap-5 .is-invalid + .select2-container .select2-selection {
            border-color: #dc3545 !important;
            box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25) !important;
        }
        .btn-rascunho { background: #6c757d; color: white; border-color: #6c757d; }
        .btn-rascunho:hover { background: #5a6268; border-color: #545b62; color: white; }
        .btn-rascunho:disabled { background: #6c757d; color: white; }
        .btn-rascunho i { margin-right: 5px; }
        .botoes-acoes { display: flex; gap: 10px; }
        .botoes-acoes .btn { flex: 1; }
        @media (max-width: 768px) { .botoes-acoes { flex-direction: column; } }
    </style>
</head>
<body>

<!-- Loading Overlay -->
<div class="loading-overlay" id="loadingOverlay">
    <div class="loading-spinner"></div>
    <div class="loading-text text-white mt-3" id="loadingText">Processando...</div>
</div>

<div class="toast-container"></div>

<div class="container-fluid mt-3">
    <div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
        <h1>
            <?php if ($modo_edicao): ?>
                <i class="bi bi-pencil-square"></i> Editar Rascunho
                <span class="badge bg-warning ms-2"><?php echo $ref_edicao; ?></span>
            <?php else: ?>
                <i class="bi bi-receipt"></i> Emitir Nota Fiscal (NFSe)
            <?php endif; ?>
        </h1>
        <div>
            <a href="consultar_notas.php" class="btn btn-outline-primary"><i class="bi bi-search"></i> Consultar Notas</a>
            <a href="servicos_gerenciar.php?empresa_id=<?php echo $empresa_id_selecionada; ?>" class="btn btn-outline-success"><i class="bi bi-gear"></i> Gerenciar Serviços</a>
            <a href="emitentes.php?empresa_id=<?php echo $empresa_id_selecionada; ?>" class="btn btn-outline-info"><i class="bi bi-building"></i> Gerenciar Emitentes</a>
        </div>
    </div>

    <?php if (isset($mensagem)): ?>
        <div class="alert alert-<?php echo $tipoMensagem ?? 'info'; ?> alert-dismissible fade show">
            <?php echo $mensagem; ?>
            <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
        </div>
    <?php endif; ?>

    <?php if ($modo_edicao && $nota_edit): ?>
        <div class="alert alert-info alert-dismissible fade show">
            <i class="bi bi-info-circle"></i> 
            <strong>Editando rascunho:</strong> <?php echo $ref_edicao; ?> - 
            Emitente: <?php echo htmlspecialchars($nota_edit['emitente_nome']); ?> - 
            Valor: R$ <?php echo number_format($nota_edit['valor_servico'], 2, ',', '.'); ?>
            <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
        </div>
    <?php endif; ?>

    <div class="row">
        <div class="col-md-8">
            <div class="card card-shadow">
                <div class="card-header <?php echo $modo_edicao ? 'bg-warning' : 'bg-primary'; ?> text-white">
                    <strong><i class="bi bi-file-text"></i> Dados da Nota Fiscal</strong>
                </div>
                <div class="card-body">
                    <form id="formEmissao" novalidate>
                        <input type="hidden" id="modo_edicao" value="<?php echo $modo_edicao ? '1' : '0'; ?>">
                        <input type="hidden" id="ref_original" value="<?php echo $ref_edicao; ?>">
                        
                        <!-- EMPRESA -->
                        <div class="row">
                            <div class="col-md-12 mb-3">
                                <label class="form-label required-field"><i class="bi bi-building"></i> Empresa</label>
                                <select class="form-select" id="empresa_id" name="empresa_id" required>
                                    <option value="">Selecione a empresa</option>
                                    <?php foreach ($empresas as $empresa): ?>
                                    <option value="<?php echo $empresa['id']; ?>" 
                                        data-token="<?php echo $empresa['token']; ?>" 
                                        data-ambiente="<?php echo $empresa['ambiente']; ?>" 
                                        <?php echo $empresa_id_selecionada == $empresa['id'] ? 'selected' : ''; ?>>
                                        <?php echo htmlspecialchars($empresa['nome']); ?> 
                                        <span class="badge <?php echo $empresa['ambiente'] == 'producao' ? 'bg-danger' : 'bg-warning'; ?>"><?php echo $empresa['ambiente'] == 'producao' ? 'PRODUÇÃO' : 'HOMOLOGAÇÃO'; ?></span>
                                    </option>
                                    <?php endforeach; ?>
                                </select>
                            </div>
                        </div>
                        
                        <!-- EMITENTE -->
                        <div class="row">
                            <div class="col-md-6 mb-3">
                                <label class="form-label required-field"><i class="bi bi-person-badge"></i> Emitente (Prestador)</label>
                                <select class="form-select" id="emitente_id" name="emitente_id" required>
                                    <option value="">Selecione o emitente</option>
                                    <?php foreach ($emitentes as $emitente): ?>
                                    <option value="<?php echo $emitente['id']; ?>" 
                                        data-cnpj="<?php echo $emitente['cnpj']; ?>" 
                                        data-razao="<?php echo htmlspecialchars($emitente['razao_social']); ?>" 
                                        data-inscricao="<?php echo $emitente['inscricao_municipal']; ?>" 
                                        data-codigo-municipio="<?php echo $emitente['codigo_municipio']; ?>"
                                        data-cidade="<?php echo $emitente['cidade']; ?>" 
                                        data-uf="<?php echo $emitente['uf']; ?>"
                                        data-optante="<?php echo $emitente['optante_simples_nacional']; ?>"
                                        data-aliquota="<?php echo $emitente['aliquota_iss'] ?? 2.00; ?>"
                                        data-codigo-nbs="<?php echo $emitente['codigo_nbs'] ?? '124032200'; ?>"
                                        data-municipio-prestacao="<?php echo $emitente['codigo_municipio_prestacao'] ?? 4304606; ?>"
                                        data-tipo-retencao="<?php echo $emitente['tipo_retencao_iss'] ?? 2; ?>"
                                        data-codigo-opcao-sn="<?php echo $emitente['codigo_opcao_simples_nacional'] ?? 3; ?>"
                                        data-usar-ibs-cbs="<?php echo $emitente['usar_ibs_cbs'] ?? 1; ?>"
                                        <?php echo ($modo_edicao && $nota_edit && $nota_edit['emitente_id'] == $emitente['id']) ? 'selected' : ''; ?>>
                                        <?php echo htmlspecialchars($emitente['razao_social']); ?> (<?php echo formatarCnpj($emitente['cnpj']); ?>)
                                    </option>
                                    <?php endforeach; ?>
                                </select>
                                <div id="config_status" class="config-automatica mt-1" style="display:none;">
                                    <i class="bi bi-check-circle-fill text-success"></i> Configurações carregadas automaticamente
                                </div>
                            </div>
                            
                            <!-- TOMADOR -->
                            <div class="col-md-6 mb-3">
                                <label class="form-label required-field"><i class="bi bi-people"></i> Tomador (Cliente)</label>
                                <select class="form-select" id="tomador_id" name="tomador_id" required>
                                    <option value="">Selecione o tomador</option>
                                    <?php foreach ($tomadores as $tomador): ?>
                                    <option value="<?php echo $tomador['id']; ?>" 
                                        data-cnpj="<?php echo $tomador['cnpj']; ?>" 
                                        data-cpf="<?php echo $tomador['cpf']; ?>" 
                                        data-razao="<?php echo htmlspecialchars($tomador['razao_social']); ?>" 
                                        data-email="<?php echo $tomador['email']; ?>" 
                                        data-telefone="<?php echo $tomador['telefone']; ?>"
                                        data-inscricao-municipal="<?php echo $tomador['inscricao_municipal']; ?>"
                                        data-logradouro="<?php echo $tomador['logradouro']; ?>"
                                        data-numero="<?php echo $tomador['numero']; ?>"
                                        data-bairro="<?php echo $tomador['bairro']; ?>"
                                        data-cidade="<?php echo $tomador['cidade']; ?>"
                                        data-codigo-municipio="<?php echo $tomador['codigo_municipio']; ?>"
                                        data-uf="<?php echo $tomador['uf']; ?>"
                                        data-cep="<?php echo $tomador['cep']; ?>"
                                        <?php echo ($modo_edicao && $nota_edit && $nota_edit['tomador_id'] == $tomador['id']) ? 'selected' : ''; ?>>
                                        <?php echo htmlspecialchars($tomador['razao_social']); ?> (<?php echo $tomador['cnpj'] ? formatarCnpj($tomador['cnpj']) : formatarCpf($tomador['cpf']); ?>)
                                    </option>
                                    <?php endforeach; ?>
                                </select>
                            </div>
                        </div>
                        
                        <!-- Referência -->
                        <div class="row">
                            <div class="col-md-12 mb-3">
                                <label class="form-label required-field"><i class="bi bi-hash"></i> Referência (ref)</label>
                                <input type="text" class="form-control" id="ref" name="ref" required readonly 
                                       value="<?php echo $modo_edicao ? htmlspecialchars($nota_edit['ref']) : ''; ?>">
                                <small class="text-muted">Identificador único da nota. Não pode ser alterado.</small>
                            </div>
                        </div>
                        
                        <hr class="my-3">
                        <h6 class="mb-3"><i class="bi bi-tools"></i> Dados do Serviço</h6>
                        
                        <!-- Código do Serviço -->
                        <div class="row">
                            <div class="col-md-12 mb-3">
                                <label class="form-label required-field"><i class="bi bi-upc-scan"></i> Código de Serviço</label>
                                <select class="form-select" id="servico_id" name="servico_id" style="width: 100%;" required>
                                    <option value="">Selecione um serviço...</option>
                                    <?php foreach ($servicos_disponiveis as $servico): ?>
                                    <option value="<?php echo $servico['id']; ?>" 
                                        data-codigo="<?php echo htmlspecialchars($servico['codigo']); ?>" 
                                        data-descricao="<?php echo htmlspecialchars($servico['descricao']); ?>" 
                                        data-aliquota="<?php echo $servico['aliquota_iss']; ?>"
                                        data-tributacao="<?php echo $servico['tributacao']; ?>"
                                        <?php echo ($modo_edicao && $nota_edit && $nota_edit['codigo_servico'] == $servico['codigo']) ? 'selected' : ''; ?>>
                                        <?php echo htmlspecialchars($servico['codigo']); ?> - <?php echo htmlspecialchars(substr($servico['descricao'], 0, 80)); ?>
                                    </option>
                                    <?php endforeach; ?>
                                </select>
                            </div>
                        </div>
                        
                        <!-- Descrição e Valor -->
                        <div class="row">
                            <div class="col-md-8 mb-3">
                                <label class="form-label required-field"><i class="bi bi-card-text"></i> Descrição do Serviço</label>
                                <textarea class="form-control" id="descricao" name="descricao" rows="3" required placeholder="Descreva detalhadamente o serviço prestado"><?php echo $modo_edicao ? htmlspecialchars($nota_edit['discriminacao_servico']) : ''; ?></textarea>
                            </div>
                            <div class="col-md-4 mb-3">
                                <label class="form-label required-field"><i class="bi bi-currency-dollar"></i> Valor do Serviço (R$)</label>
                                <input type="number" step="0.01" min="0.01" class="form-control" id="valor_servico" name="valor_servico" required placeholder="Ex: 1500.00"
                                       value="<?php echo $modo_edicao ? number_format($nota_edit['valor_servico'], 2, '.', '') : ''; ?>">
                            </div>
                        </div>
                        
                        <!-- Alíquota e Datas -->
                        <div class="row">
                            <div class="col-md-3 mb-3">
                                <label class="form-label"><i class="bi bi-percent"></i> Alíquota ISS (%)</label>
                                <input type="number" step="0.01" class="form-control" id="aliquota" name="aliquota" placeholder="Ex: 2.00, 4.00, 5.00"
                                       value="<?php echo $modo_edicao ? number_format($nota_edit['aliquota'], 2, '.', '') : ''; ?>">
                                <div class="fonte-config" id="aliquota_fonte"><i class="bi bi-database"></i> Aguardando seleção...</div>
                            </div>
                            <div class="col-md-4 mb-3">
                                <label class="form-label"><i class="bi bi-calendar"></i> Data de Emissão</label>
                                <input type="datetime-local" class="form-control" id="data_emissao" name="data_emissao"
                                       value="<?php echo $modo_edicao ? date('Y-m-d\TH:i', strtotime($nota_edit['data_emissao'])) : ''; ?>">
                            </div>
                            <div class="col-md-5 mb-3">
                                <label class="form-label"><i class="bi bi-calendar-check"></i> Data de Competência</label>
                                <input type="date" class="form-control" id="data_competencia" name="data_competencia"
                                       value="<?php echo $modo_edicao ? date('Y-m-d', strtotime($nota_edit['data_competencia'])) : ''; ?>">
                            </div>
                        </div>
                        
                        <!-- Retenção ISS e Regime Tributário -->
                        <div class="row">
                            <div class="col-md-6 mb-3">
                                <label class="form-label required-field"><i class="bi bi-calculator"></i> Tipo de Retenção do ISSQN</label>
                                <select class="form-select" id="tipo_retencao_iss" name="tipo_retencao_iss" required>
                                    <option value="">Selecione a responsabilidade pelo ISSQN</option>
                                    <option value="1">❌ Não Retido</option>
                                    <option value="2" <?php echo ($modo_edicao && $nota_edit['tipo_retencao_iss'] == 2) ? 'selected' : ''; ?>>✅ Retido pelo Tomador</option>
                                    <option value="3">🔄 Retido pelo Intermediário</option>
                                </select>
                                <div class="fonte-config" id="retencao_fonte"><i class="bi bi-database"></i> Aguardando seleção...</div>
                            </div>
                            <div class="col-md-6 mb-3">
                                <label class="form-label required-field"><i class="bi bi-graph-up"></i> Regime Tributário</label>
                                <select class="form-select" id="regime_tributario" name="regime_tributario" required>
                                    <option value="">Selecione o regime tributário</option>
                                    <option value="1" <?php echo ($modo_edicao && $nota_edit['regime_tributario'] == 1) ? 'selected' : ''; ?>>🏢 Não optante (Regime Normal)</option>
                                    <option value="2" <?php echo ($modo_edicao && $nota_edit['regime_tributario'] == 2) ? 'selected' : ''; ?>>👤 MEI (Microempreendedor Individual)</option>
                                    <option value="3" <?php echo ($modo_edicao && $nota_edit['regime_tributario'] == 3) ? 'selected' : ''; ?>>✅ Optante Simples Nacional (ME/EPP)</option>
                                    <option value="4" <?php echo ($modo_edicao && $nota_edit['regime_tributario'] == 4) ? 'selected' : ''; ?>>⚠️ Simples Nacional - Excesso de sublimite</option>
                                </select>
                                <div class="fonte-config" id="regime_fonte"><i class="bi bi-database"></i> Aguardando seleção...</div>
                            </div>
                        </div>
                        
                        <!-- Código NBS e Município -->
                        <div class="row">
                            <div class="col-md-6 mb-3">
                                <label class="form-label"><i class="bi bi-code-square"></i> Código NBS <span class="badge bg-danger">CORRETO</span></label>
                                <select class="form-select codigo-nbs-correto" id="codigo_nbs" name="codigo_nbs" required>
                                    <option value="">Selecione o código NBS</option>
                                    <option value="124032200" <?php echo ($modo_edicao && ($nota_edit['codigo_nbs'] ?? '124032200') == '124032200') ? 'selected' : ''; ?>>124032200 - Coleta de resíduos recicláveis, não perigosos ✅</option>
                                    <option value="124033200" <?php echo ($modo_edicao && ($nota_edit['codigo_nbs'] ?? '') == '124033200') ? 'selected' : ''; ?>>124033200 - Coleta de resíduos gerais, exceto de origem doméstica</option>
                                    <option value="124041200" <?php echo ($modo_edicao && ($nota_edit['codigo_nbs'] ?? '') == '124041200') ? 'selected' : ''; ?>>124041200 - Coleta de resíduos de saúde</option>
                                    <option value="124042200" <?php echo ($modo_edicao && ($nota_edit['codigo_nbs'] ?? '') == '124042200') ? 'selected' : ''; ?>>124042200 - Coleta de resíduos perigosos</option>
                                    <option value="121012200" <?php echo ($modo_edicao && ($nota_edit['codigo_nbs'] ?? '') == '121012200') ? 'selected' : ''; ?>>121012200 - Transporte rodoviário de cargas 🚛</option>
                                </select>
                                <div class="fonte-config" id="nbs_fonte"><i class="bi bi-database"></i> Aguardando seleção...</div>
                            </div>
                            <div class="col-md-6 mb-3">
                                <label class="form-label"><i class="bi bi-geo-alt"></i> Município de Prestação</label>
                                <select class="form-select" id="municipio_prestacao" name="municipio_prestacao" required>
                                    <option value="">Selecione o município...</option>
                                    <?php foreach ($municipios as $municipio): ?>
                                    <option value="<?php echo $municipio['codigo_municipio_completo']; ?>" 
                                        <?php echo ($modo_edicao && $nota_edit['codigo_municipio_prestacao'] == $municipio['codigo_municipio_completo']) ? 'selected' : ''; ?>
                                        <?php echo (!$modo_edicao && $municipio['codigo_municipio_completo'] == '4304606') ? 'selected' : ''; ?>>
                                        <?php echo htmlspecialchars($municipio['nome_municipio'] . ' / ' . $municipio['uf']); ?>
                                        (<?php echo $municipio['codigo_municipio_completo']; ?>)
                                    </option>
                                    <?php endforeach; ?>
                                </select>
                                <div class="fonte-config" id="municipio_fonte"><i class="bi bi-database"></i> Aguardando seleção...</div>
                            </div>
                        </div>
                        
                        <!-- IBS/CBS -->
                        <hr class="my-3">
                        <div class="ibs-cbs-section">
                            <h6 class="mb-3">
                                <i class="bi bi-graph-up-arrow"></i> IBS/CBS 
                                <span class="badge badge-ibs">Novo - Obrigatório a partir de 01/01/2026</span>
                            </h6>
                            <p class="text-muted small">Preencha os campos conforme o serviço prestado e o prestador, baseado no Anexo VIII da NFS-e.</p>
                            
                            <div class="row">
                                <div class="col-md-6 mb-3">
                                    <label class="form-label required-field"><i class="bi bi-tag"></i> Indicador de Operação <span class="badge badge-obrigatorio">Obrigatório</span></label>
                                    <select class="form-select" id="codigo_indicador_operacao" name="codigo_indicador_operacao" required>
                                        <option value="">Selecione o indicador...</option>
                                        <option value="050102" <?php echo ($modo_edicao && ($nota_edit['payload']['codigo_indicador_operacao'] ?? '') == '050102') ? 'selected' : ''; ?>>050102 - Serviço prestado fisicamente sobre bem móvel material</option>
                                        <option value="050103" <?php echo ($modo_edicao && ($nota_edit['payload']['codigo_indicador_operacao'] ?? '') == '050103') ? 'selected' : ''; ?>>050103 - Serviço prestado sobre bem imóvel</option>
                                        <option value="050104" <?php echo ($modo_edicao && ($nota_edit['payload']['codigo_indicador_operacao'] ?? '') == '050104') ? 'selected' : ''; ?>>050104 - Serviço prestado remotamente via internet</option>
                                        <option value="050105" <?php echo ($modo_edicao && ($nota_edit['payload']['codigo_indicador_operacao'] ?? '') == '050105') ? 'selected' : ''; ?>>050105 - Serviço prestado presencialmente</option>
                                        <option value="100401" <?php echo ($modo_edicao && ($nota_edit['payload']['codigo_indicador_operacao'] ?? '') == '100401') ? 'selected' : ''; ?>>100401 - Operação com fornecimento de mercadorias</option>
                                    </select>
                                </div>
                                <div class="col-md-6 mb-3">
                                    <label class="form-label required-field"><i class="bi bi-tags"></i> Classificação Tributária <span class="badge badge-obrigatorio">Obrigatório</span></label>
                                    <select class="form-select" id="ibs_cbs_classificacao_tributaria" name="ibs_cbs_classificacao_tributaria" required>
                                        <option value="">Selecione a classificação...</option>
                                        <option value="000001" <?php echo ($modo_edicao && ($nota_edit['payload']['ibs_cbs_classificacao_tributaria'] ?? '000001') == '000001') ? 'selected' : ''; ?>>000001 - Situações tributadas integralmente pelo IBS e CBS</option>
                                        <option value="000002" <?php echo ($modo_edicao && ($nota_edit['payload']['ibs_cbs_classificacao_tributaria'] ?? '') == '000002') ? 'selected' : ''; ?>>000002 - Operações com direito a crédito</option>
                                        <option value="000003" <?php echo ($modo_edicao && ($nota_edit['payload']['ibs_cbs_classificacao_tributaria'] ?? '') == '000003') ? 'selected' : ''; ?>>000003 - Operações com isenção</option>
                                        <option value="000004" <?php echo ($modo_edicao && ($nota_edit['payload']['ibs_cbs_classificacao_tributaria'] ?? '') == '000004') ? 'selected' : ''; ?>>000004 - Operações com imunidade</option>
                                    </select>
                                </div>
                            </div>
                            
                            <div class="row">
                                <div class="col-md-3 mb-3">
                                    <label class="form-label"><i class="bi bi-building"></i> Compra Governamental</label>
                                    <select class="form-select" id="compra_governamental" name="compra_governamental">
                                        <option value="0" <?php echo ($modo_edicao && ($nota_edit['payload']['compra_governamental'] ?? '0') == '0') ? 'selected' : ''; ?>>❌ Não</option>
                                        <option value="1" <?php echo ($modo_edicao && ($nota_edit['payload']['compra_governamental'] ?? '') == '1') ? 'selected' : ''; ?>>✅ Sim</option>
                                    </select>
                                </div>
                                <div class="col-md-3 mb-3">
                                    <label class="form-label"><i class="bi bi-person-check"></i> Tomador é Destinatário</label>
                                    <select class="form-select" id="indicador_destinatario" name="indicador_destinatario">
                                        <option value="0" <?php echo ($modo_edicao && ($nota_edit['payload']['indicador_destinatario'] ?? '0') == '0') ? 'selected' : ''; ?>>✅ Sim</option>
                                        <option value="1" <?php echo ($modo_edicao && ($nota_edit['payload']['indicador_destinatario'] ?? '') == '1') ? 'selected' : ''; ?>>❌ Não</option>
                                    </select>
                                </div>
                                <div class="col-md-3 mb-3">
                                    <label class="form-label"><i class="bi bi-person"></i> Consumidor Final</label>
                                    <select class="form-select" id="consumidor_final" name="consumidor_final">
                                        <option value="0" <?php echo ($modo_edicao && ($nota_edit['payload']['consumidor_final'] ?? '0') == '0') ? 'selected' : ''; ?>>0 - Não</option>
                                        <option value="1" <?php echo ($modo_edicao && ($nota_edit['payload']['consumidor_final'] ?? '') == '1') ? 'selected' : ''; ?>>1 - Sim</option>
                                    </select>
                                </div>
                                <div class="col-md-3 mb-3">
                                    <label class="form-label"><i class="bi bi-file-check"></i> Finalidade de Emissão</label>
                                    <select class="form-select" id="finalidade_emissao" name="finalidade_emissao">
                                        <option value="0" <?php echo ($modo_edicao && ($nota_edit['payload']['finalidade_emissao'] ?? '0') == '0') ? 'selected' : ''; ?>>0 - NFS-e regular</option>
                                        <option value="1" <?php echo ($modo_edicao && ($nota_edit['payload']['finalidade_emissao'] ?? '') == '1') ? 'selected' : ''; ?>>1 - NFS-e de substituição</option>
                                    </select>
                                </div>
                            </div>
                            
                            <div class="row">
                                <div class="col-md-3 mb-3">
                                    <label class="form-label"><i class="bi bi-exclamation-triangle"></i> Situação Tributária IBS/CBS</label>
                                    <select class="form-select" id="ibs_cbs_situacao_tributaria" name="ibs_cbs_situacao_tributaria">
                                        <option value="000" <?php echo ($modo_edicao && ($nota_edit['payload']['ibs_cbs_situacao_tributaria'] ?? '000') == '000') ? 'selected' : ''; ?>>000 - Tributada integralmente</option>
                                        <option value="001" <?php echo ($modo_edicao && ($nota_edit['payload']['ibs_cbs_situacao_tributaria'] ?? '') == '001') ? 'selected' : ''; ?>>001 - Tributada com redução</option>
                                        <option value="002" <?php echo ($modo_edicao && ($nota_edit['payload']['ibs_cbs_situacao_tributaria'] ?? '') == '002') ? 'selected' : ''; ?>>002 - Isenta</option>
                                        <option value="003" <?php echo ($modo_edicao && ($nota_edit['payload']['ibs_cbs_situacao_tributaria'] ?? '') == '003') ? 'selected' : ''; ?>>003 - Imune</option>
                                        <option value="004" <?php echo ($modo_edicao && ($nota_edit['payload']['ibs_cbs_situacao_tributaria'] ?? '') == '004') ? 'selected' : ''; ?>>004 - Não incidência</option>
                                    </select>
                                </div>
                                <div class="col-md-3 mb-3">
                                    <label class="form-label"><i class="bi bi-globe"></i> País de Prestação</label>
                                    <input type="text" class="form-control" id="pais_prestacao" name="pais_prestacao" value="1058" readonly>
                                    <small class="text-muted">Brasil (1058) - Fixo</small>
                                </div>
                            </div>
                        </div>
                        
                        <!-- Observações -->
                        <div class="row mt-3">
                            <div class="col-md-12 mb-3">
                                <label class="form-label"><i class="bi bi-chat-text"></i> Observações</label>
                                <textarea class="form-control" id="observacoes" name="observacoes" rows="2" placeholder="Informações adicionais"><?php echo $modo_edicao ? htmlspecialchars($nota_edit['observacoes'] ?? '') : ''; ?></textarea>
                            </div>
                        </div>
                        
                        <!-- Botões de Ação -->
                        <div class="mt-4">
                            <div class="botoes-acoes">
                                <button type="button" class="btn btn-secondary btn-lg btn-rascunho" id="btn_salvar_rascunho">
                                    <i class="bi bi-file-earmark"></i> <?php echo $modo_edicao ? 'Atualizar Rascunho' : 'Salvar Rascunho'; ?>
                                </button>
                                <button type="submit" class="btn btn-success btn-lg" id="btn_emitir">
                                    <i class="bi bi-send"></i> <?php echo $modo_edicao ? 'Atualizar e Emitir' : 'Emitir Nota Fiscal'; ?>
                                </button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
        
        <div class="col-md-4">
            <div class="card card-shadow mb-3 border-primary">
                <div class="card-header bg-primary text-white"><strong><i class="bi bi-building"></i> Empresa</strong></div>
                <div class="card-body info-card" id="info_empresa_card">
                    <?php if ($modo_edicao && $nota_edit): ?>
                        <strong><?php echo htmlspecialchars($nota_edit['empresa_nome']); ?></strong><br>
                        <span class="badge bg-<?php echo $nota_edit['empresa_ambiente'] == 'producao' ? 'danger' : 'warning'; ?>">
                            <?php echo strtoupper($nota_edit['empresa_ambiente'] ?? 'homologacao'); ?>
                        </span>
                    <?php else: ?>
                        Selecione uma empresa
                    <?php endif; ?>
                </div>
            </div>
            <div class="card card-shadow mb-3">
                <div class="card-header bg-info text-white"><strong><i class="bi bi-building"></i> Emitente</strong></div>
                <div class="card-body info-card" id="info_emitente_card">
                    <?php if ($modo_edicao && $nota_edit): ?>
                        <strong><?php echo htmlspecialchars($nota_edit['emitente_nome']); ?></strong><br>
                        CNPJ: <?php echo formatarCnpj($nota_edit['emitente_cnpj']); ?><br>
                        Insc. Municipal: <?php echo $nota_edit['emitente_inscricao'] ?? 'N/A'; ?>
                    <?php else: ?>
                        Selecione um emitente
                    <?php endif; ?>
                </div>
            </div>
            <div class="card card-shadow mb-3">
                <div class="card-header bg-secondary text-white"><strong><i class="bi bi-people"></i> Tomador</strong></div>
                <div class="card-body info-card" id="info_tomador_card">
                    <?php if ($modo_edicao && $nota_edit): ?>
                        <strong><?php echo htmlspecialchars($nota_edit['tomador_nome']); ?></strong><br>
                        <?php echo $nota_edit['tomador_cnpj'] ? formatarCnpj($nota_edit['tomador_cnpj']) : formatarCpf($nota_edit['tomador_cpf']); ?><br>
                        Email: <?php echo $nota_edit['tomador_email'] ?? 'N/A'; ?>
                    <?php else: ?>
                        Selecione um tomador
                    <?php endif; ?>
                </div>
            </div>
            <div class="card card-shadow mb-3">
                <div class="card-header bg-warning"><strong><i class="bi bi-calculator"></i> Resumo da Nota</strong></div>
                <div class="card-body" id="resumo_nota">
                    <div class="resumo-nota-exato" id="resumoNotaExato">
                        <?php if ($modo_edicao && $nota_edit): ?>
                            <p class="text-muted text-center">Carregando resumo...</p>
                        <?php else: ?>
                            <p class="text-muted text-center">Preencha os dados para ver o resumo</p>
                        <?php endif; ?>
                    </div>
                </div>
            </div>
            <?php if ($modo_edicao && $nota_edit): ?>
            <div class="card card-shadow mb-3 border-danger">
                <div class="card-header bg-danger text-white"><strong><i class="bi bi-trash"></i> Ações Adicionais</strong></div>
                <div class="card-body">
                    <button class="btn btn-outline-danger btn-sm w-100" onclick="excluirRascunho('<?php echo $nota_edit['ref']; ?>')">
                        <i class="bi bi-trash"></i> Excluir Rascunho
                    </button>
                </div>
            </div>
            <?php endif; ?>
        </div>
    </div>
</div>

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
<script>
$(document).ready(function() {
    console.log('✅ jQuery versão:', $.fn.jquery);
    console.log('✅ Documento pronto');
    var modoEdicao = $('#modo_edicao').val() === '1';
    console.log('📝 Modo edição:', modoEdicao);
    
    var BASE_URL = window.location.pathname.substring(0, window.location.pathname.lastIndexOf('/'));
    console.log('📍 BASE_URL:', BASE_URL);
    
    function gerarReferenciaUnica() {
        var now = new Date();
        return 'NF_' + now.getFullYear() + 
               ('0' + (now.getMonth()+1)).slice(-2) + 
               ('0' + now.getDate()).slice(-2) + '_' +
               ('0' + now.getHours()).slice(-2) +
               ('0' + now.getMinutes()).slice(-2) +
               ('0' + now.getSeconds()).slice(-2) +
               '_' + now.getMilliseconds() +
               Math.floor(Math.random() * 100);
    }
    
    if (!modoEdicao) {
        $('#ref').val(gerarReferenciaUnica());
        $('#data_emissao').val(new Date().toISOString().slice(0,16));
        $('#data_competencia').val(new Date().toISOString().slice(0,10));
    }
    
    $('#empresa_id, #emitente_id, #tomador_id, #servico_id, #municipio_prestacao').select2({ 
        theme: 'bootstrap-5', 
        width: '100%', 
        allowClear: true 
    });
    
    function formatarCnpj(cnpj) { 
        if (!cnpj) return ''; 
        var s = cnpj.toString().replace(/\D/g,''); 
        return s.length === 14 ? s.replace(/^(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})$/, '$1.$2.$3/$4-$5') : cnpj; 
    }
    function formatarCpf(cpf) { 
        if (!cpf) return ''; 
        var s = cpf.toString().replace(/\D/g,''); 
        return s.length === 11 ? s.replace(/^(\d{3})(\d{3})(\d{3})(\d{2})$/, '$1.$2.$3-$4') : cpf; 
    }
    
    function mostrarErro(msg) {
        $('.toast-container').empty();
        var toast = $(`<div class="toast show" role="alert" data-bs-autohide="true" data-bs-delay="8000">
            <div class="toast-header bg-danger text-white">
                <strong class="me-auto"><i class="bi bi-exclamation-triangle"></i> Erro</strong>
                <button type="button" class="btn-close btn-close-white" data-bs-dismiss="toast"></button>
            </div>
            <div class="toast-body" style="white-space:pre-line;">${msg}</div>
        </div>`);
        $('.toast-container').append(toast);
        toast.toast('show');
        setTimeout(function() { toast.remove(); }, 8000);
    }
    
    function mostrarSucesso(msg) {
        var toast = $(`<div class="toast show" role="alert" data-bs-autohide="true" data-bs-delay="5000">
            <div class="toast-header bg-success text-white">
                <strong class="me-auto"><i class="bi bi-check-circle"></i> Sucesso</strong>
                <button type="button" class="btn-close btn-close-white" data-bs-dismiss="toast"></button>
            </div>
            <div class="toast-body">${msg}</div>
        </div>`);
        $('.toast-container').append(toast);
        toast.toast('show');
        setTimeout(function() { toast.remove(); }, 5000);
    }
    
    function mostrarInfo(msg) {
        var toast = $(`<div class="toast show" role="alert" data-bs-autohide="true" data-bs-delay="5000">
            <div class="toast-header bg-info text-white">
                <strong class="me-auto"><i class="bi bi-info-circle"></i> Informação</strong>
                <button type="button" class="btn-close btn-close-white" data-bs-dismiss="toast"></button>
            </div>
            <div class="toast-body">${msg}</div>
        </div>`);
        $('.toast-container').append(toast);
        toast.toast('show');
        setTimeout(function() { toast.remove(); }, 5000);
    }
    
    function limparValidacoes() {
        $('.is-invalid').removeClass('is-invalid');
    }
    
    function carregarEmitentesPorEmpresa(empresaId) {
        limparValidacoes();
        
        if (!empresaId) {
            var select = $('#emitente_id');
            if (select.data('select2')) select.select2('destroy');
            select.empty().append('<option value="">Selecione o emitente</option>');
            select.select2({ theme: 'bootstrap-5', width: '100%', allowClear: true });
            $('#info_emitente_card').html('Selecione uma empresa primeiro');
            return;
        }
        
        console.log('🔄 Buscando emitentes para empresa ID:', empresaId);
        $('#loadingOverlay').show();
        
        $.ajax({
            url: BASE_URL + '/emitir_nota.php',
            method: 'GET',
            data: { 
                action: 'buscar_emitentes',
                empresa_id: empresaId 
            },
            dataType: 'json',
            timeout: 15000,
            success: function(response) {
                $('#loadingOverlay').hide();
                console.log('📋 Resposta da API:', response);
                
                var select = $('#emitente_id');
                if (select.data('select2')) select.select2('destroy');
                select.empty();
                
                if (response.sucesso && response.emitentes && response.emitentes.length > 0) {
                    select.append('<option value="">Selecione o emitente</option>');
                    $.each(response.emitentes, function(i, e) {
                        select.append(
                            '<option value="' + e.id + '" ' +
                            'data-cnpj="' + e.cnpj + '" ' +
                            'data-razao="' + e.razao_social + '" ' +
                            'data-inscricao="' + (e.inscricao_municipal || '') + '">' +
                            e.razao_social + ' (' + formatarCnpj(e.cnpj) + ')' +
                            '</option>'
                        );
                    });
                    
                    if (modoEdicao) {
                        var emitenteId = <?php echo $modo_edicao ? $nota_edit['emitente_id'] : 0; ?>;
                        if (emitenteId) {
                            select.val(emitenteId);
                            console.log('✅ Emitente selecionado da nota:', emitenteId);
                        }
                    } else {
                        select.val(response.emitentes[0].id);
                        console.log('✅ Emitente selecionado:', response.emitentes[0].razao_social);
                    }
                    
                    var selected = select.find(':selected');
                    $('#info_emitente_card').html(
                        '<strong>' + (selected.data('razao') || '') + '</strong><br>' +
                        'CNPJ: ' + formatarCnpj(selected.data('cnpj')) + '<br>' +
                        'Insc. Municipal: ' + (selected.data('inscricao') || 'N/A')
                    );
                } else {
                    select.append('<option value="">Nenhum emitente encontrado</option>');
                    $('#info_emitente_card').html('Nenhum emitente cadastrado para esta empresa');
                }
                
                select.select2({ theme: 'bootstrap-5', width: '100%', allowClear: true });
                select.trigger('change');
            },
            error: function(xhr, status, error) {
                $('#loadingOverlay').hide();
                console.error('❌ AJAX Error:', status, error);
                var select = $('#emitente_id');
                if (select.data('select2')) select.select2('destroy');
                select.empty().append('<option value="">Erro ao carregar emitentes</option>');
                select.select2({ theme: 'bootstrap-5', width: '100%', allowClear: true });
                mostrarErro('❌ Erro ao carregar emitentes: ' + status + '\nVerifique o caminho da API.');
            }
        });
    }
    
    function carregarConfiguracoesEmitente(emitenteId) {
        limparValidacoes();
        
        if (!emitenteId) {
            $('#config_status').hide();
            $('#aliquota_fonte').html('<i class="bi bi-database"></i> Aguardando seleção...');
            $('#nbs_fonte').html('<i class="bi bi-database"></i> Aguardando seleção...');
            $('#retencao_fonte').html('<i class="bi bi-database"></i> Aguardando seleção...');
            $('#regime_fonte').html('<i class="bi bi-database"></i> Aguardando seleção...');
            return;
        }
        
        console.log('🔄 Buscando configurações para emitente ID:', emitenteId);
        $('#loadingOverlay').show();
        $('#config_status').hide();
        
        $.ajax({
            url: BASE_URL + '/emitir_nota.php',
            method: 'GET',
            data: { 
                action: 'buscar_configuracoes_emitente',
                emitente_id: emitenteId 
            },
            dataType: 'json',
            timeout: 15000,
            success: function(response) {
                $('#loadingOverlay').hide();
                console.log('📋 Configurações recebidas:', response);
                
                if (response.sucesso) {
                    var e = response.emitente;
                    
                    if (!modoEdicao || !$('#aliquota').val()) {
                        if (e.aliquota_iss) {
                            $('#aliquota').val(parseFloat(e.aliquota_iss).toFixed(2));
                            $('#aliquota_fonte').html('<i class="bi bi-check-circle-fill text-success"></i> Carregado: ' + parseFloat(e.aliquota_iss).toFixed(2) + '%');
                        }
                    }
                    
                    if (!modoEdicao || !$('#codigo_nbs').val()) {
                        if (e.codigo_nbs) {
                            $('#codigo_nbs').val(e.codigo_nbs).trigger('change');
                            $('#nbs_fonte').html('<i class="bi bi-check-circle-fill text-success"></i> Carregado: ' + e.codigo_nbs);
                        }
                    }
                    
                    if (!modoEdicao || !$('#municipio_prestacao').val()) {
                        if (e.codigo_municipio_prestacao) {
                            $('#municipio_prestacao').val(e.codigo_municipio_prestacao).trigger('change');
                            $('#municipio_fonte').html('<i class="bi bi-check-circle-fill text-success"></i> Carregado: ' + e.codigo_municipio_prestacao);
                            buscarAliquotaMunicipio(e.codigo_municipio_prestacao);
                        }
                    }
                    
                    if (!modoEdicao || !$('#tipo_retencao_iss').val()) {
                        if (e.tipo_retencao_iss) {
                            $('#tipo_retencao_iss').val(e.tipo_retencao_iss).trigger('change');
                            var retencaoText = {1:'Não Retido',2:'Retido pelo Tomador',3:'Retido pelo Intermediário'}[e.tipo_retencao_iss] || '';
                            $('#retencao_fonte').html('<i class="bi bi-check-circle-fill text-success"></i> Carregado: ' + retencaoText);
                        }
                    }
                    
                    if (!modoEdicao || !$('#regime_tributario').val()) {
                        if (e.codigo_opcao_simples_nacional) {
                            $('#regime_tributario').val(e.codigo_opcao_simples_nacional).trigger('change');
                            var regimeText = {1:'Não optante',2:'MEI',3:'Optante SN',4:'Excesso'}[e.codigo_opcao_simples_nacional] || '';
                            $('#regime_fonte').html('<i class="bi bi-check-circle-fill text-success"></i> Carregado: ' + regimeText);
                        }
                    }
                    
                    if (e.usar_ibs_cbs == 1) {
                        $('.ibs-cbs-section').show();
                    } else {
                        $('.ibs-cbs-section').hide();
                    }
                    
                    $('#info_emitente_card').html(
                        '<strong>' + (e.razao_social || '') + '</strong><br>' +
                        'CNPJ: ' + formatarCnpj(e.cnpj) + '<br>' +
                        'Insc. Municipal: ' + (e.inscricao_municipal || 'N/A') + '<br>' +
                        'Alíquota: ' + (parseFloat(e.aliquota_iss) || 0).toFixed(2) + '%<br>' +
                        '<span class="badge bg-info">' + (e.empresa_nome || '') + '</span>' +
                        ' <span class="badge ' + (e.ambiente == 'producao' ? 'bg-danger' : 'bg-warning') + '">' + (e.ambiente == 'producao' ? 'PRODUÇÃO' : 'HOMOLOGAÇÃO') + '</span>'
                    );
                    
                    $('#config_status').show().html(
                        '<i class="bi bi-check-circle-fill text-success"></i> Configurações carregadas: Alíquota ' + parseFloat(e.aliquota_iss).toFixed(2) + '% | NBS ' + e.codigo_nbs
                    );
                    
                    atualizarResumo();
                }
            },
            error: function(xhr, status, error) {
                $('#loadingOverlay').hide();
                console.error('❌ AJAX Error:', status, error);
                mostrarErro('❌ Erro ao carregar configurações: ' + status);
            }
        });
    }
    
    function buscarAliquotaMunicipio(codigoMunicipio) {
        if (!codigoMunicipio) {
            $('#aliquota_fonte').html('<i class="bi bi-database"></i> Selecione um município');
            return;
        }
        
        console.log('🔄 Buscando alíquota para município:', codigoMunicipio);
        
        $.ajax({
            url: BASE_URL + '/emitir_nota.php',
            method: 'GET',
            data: { 
                action: 'buscar_aliquota_municipio',
                codigo_municipio: codigoMunicipio 
            },
            dataType: 'json',
            timeout: 10000,
            success: function(response) {
                console.log('📋 Resposta da alíquota:', response);
                
                if (response.sucesso && response.aliquota) {
                    var aliquota = parseFloat(response.aliquota).toFixed(2);
                    
                    var campoAliquota = $('#aliquota');
                    var valorAtual = campoAliquota.val();
                    
                    if (!modoEdicao || !valorAtual || valorAtual === '' || parseFloat(valorAtual) === 0) {
                        campoAliquota.val(aliquota);
                        $('#aliquota_fonte').html(
                            '<i class="bi bi-check-circle-fill text-success"></i> Carregado do município: ' + aliquota + '%'
                        );
                    } else {
                        $('#aliquota_fonte').html(
                            '<i class="bi bi-info-circle text-info"></i> Alíquota do município: ' + aliquota + '% (mantido valor manual)'
                        );
                    }
                    
                    atualizarResumo();
                } else {
                    $('#aliquota_fonte').html(
                        '<i class="bi bi-exclamation-triangle text-warning"></i> ' + (response.erro || 'Alíquota não encontrada')
                    );
                }
            },
            error: function(xhr, status, error) {
                console.error('❌ Erro ao buscar alíquota:', status, error);
                $('#aliquota_fonte').html('<i class="bi bi-exclamation-triangle text-danger"></i> Erro ao buscar alíquota');
            }
        });
    }
    
    function carregarServicos(empresaId) {
        if (!empresaId) return;
        
        $.ajax({
            url: BASE_URL + '/api/buscar_servicos_empresa.php',
            method: 'GET',
            data: { empresa_id: empresaId },
            dataType: 'json',
            success: function(response) {
                var select = $('#servico_id');
                if (select.data('select2')) select.select2('destroy');
                select.empty().append('<option value="">Selecione um serviço...</option>');
                if (response.sucesso && response.itens) {
                    $.each(response.itens, function(i, s) {
                        select.append('<option value="'+s.id+'" data-codigo="'+s.codigo+'" data-descricao="'+s.descricao+'" data-aliquota="'+s.aliquota_iss+'">'+s.codigo+' - '+s.descricao.substring(0,80)+'</option>');
                    });
                }
                select.select2({ theme: 'bootstrap-5', width: '100%', allowClear: true });
                
                if (modoEdicao) {
                    var codigoServico = '<?php echo $modo_edicao ? addslashes($nota_edit['codigo_servico']) : ''; ?>';
                    if (codigoServico) {
                        select.find('option').each(function() {
                            if ($(this).data('codigo') == codigoServico) {
                                $(this).prop('selected', true);
                            }
                        });
                        select.trigger('change');
                    }
                }
            },
            error: function(xhr) {
                console.error('Erro ao carregar serviços:', xhr);
            }
        });
    }
    
    $('#empresa_id').on('change', function() {
        limparValidacoes();
        var empresaId = $(this).val();
        console.log('🏢 Empresa selecionada:', empresaId);
        
        if (empresaId) {
            var option = $(this).find(':selected');
            var ambiente = option.data('ambiente');
            var ambienteTexto = ambiente == 'producao' ? 'PRODUÇÃO' : 'HOMOLOGAÇÃO';
            
            $('#info_empresa_card').html(
                '<strong>' + option.text().split(' ')[0] + '</strong><br>' +
                '<span class="badge bg-' + (ambiente == 'producao' ? 'danger' : 'warning') + '">' + ambienteTexto + '</span>'
            );
            
            carregarEmitentesPorEmpresa(empresaId);
            carregarServicos(empresaId);
        }
        atualizarResumo();
    });
    
    $('#emitente_id').on('change', function() {
        limparValidacoes();
        var emitenteId = $(this).val();
        console.log('👤 Emitente selecionado:', emitenteId);
        if (emitenteId) {
            carregarConfiguracoesEmitente(emitenteId);
        }
        atualizarResumo();
    });
    
    $('#tomador_id').on('change', function() {
        var opt = $(this).find(':selected');
        if (opt.val()) {
            $('#info_tomador_card').html(
                '<strong>'+opt.data('razao')+'</strong><br>' +
                (opt.data('cnpj') ? 'CNPJ: '+formatarCnpj(opt.data('cnpj')) : 'CPF: '+formatarCpf(opt.data('cpf')))+'<br>' +
                'Email: '+opt.data('email')
            );
        }
        atualizarResumo();
    });
    
    $('#servico_id').on('change', function() {
        var opt = $(this).find(':selected');
        if (opt.val() && opt.data('codigo')) {
            if (opt.data('descricao') && !$('#descricao').val()) {
                $('#descricao').val(opt.data('descricao'));
            }
        }
        atualizarResumo();
    });
    
    $('#municipio_prestacao').on('change', function() {
        var codigoMunicipio = $(this).val();
        console.log('📍 Município selecionado:', codigoMunicipio);
        
        if (codigoMunicipio) {
            var nomeMunicipio = $(this).find(':selected').text();
            $('#municipio_fonte').html('<i class="bi bi-check-circle-fill text-success"></i> Selecionado: ' + nomeMunicipio);
            buscarAliquotaMunicipio(codigoMunicipio);
        } else {
            $('#municipio_fonte').html('<i class="bi bi-database"></i> Aguardando seleção...');
            $('#aliquota_fonte').html('<i class="bi bi-database"></i> Aguardando seleção...');
        }
        atualizarResumo();
    });
    
    function atualizarResumo() {
        var valor = parseFloat($('#valor_servico').val()) || 0;
        var aliquota = parseFloat($('#aliquota').val()) || 0;
        var regime = $('#regime_tributario').val();
        var tipoRetencao = $('#tipo_retencao_iss').val();
        
        var usarIbsCbs = $('#emitente_id').find(':selected').data('usar-ibs-cbs');
        if (usarIbsCbs === undefined) {
            usarIbsCbs = 1;
        }
        
        var valorISS = (valor * aliquota) / 100;
        var valorIBS = 0;
        var valorCBS = 0;
        var totalTributos = valorISS;
        var percentualTotalTributos = aliquota;
        var baseIbsCbs = 0;
        
        if (usarIbsCbs == 1 && tipoRetencao == '2') {
            baseIbsCbs = valor - valorISS;
            valorIBS = (baseIbsCbs * 0.10) / 100;
            valorCBS = (baseIbsCbs * 0.90) / 100;
            totalTributos = valorISS + valorIBS + valorCBS;
            percentualTotalTributos = aliquota + 1.00;
        }
        
        var totalLiquido = (tipoRetencao == '2') ? (valor - valorISS) : valor;
        var baseCalculo = valor;
        
        var regimeText = {
            1: '🏢 Não optante (Regime Normal)',
            2: '👤 MEI (Microempreendedor Individual)',
            3: '✅ Optante Simples Nacional (ME/EPP)',
            4: '⚠️ Simples Nacional - Excesso de sublimite'
        }[regime] || '';
        
        var retencaoText = {
            1: '❌ Não Retido',
            2: '✅ Retido pelo Tomador',
            3: '🔄 Retido pelo Intermediário'
        }[tipoRetencao] || '';
        
        var indicadorOperacao = $('#codigo_indicador_operacao option:selected').text() || 'Não selecionado';
        var classificacaoTrib = $('#ibs_cbs_classificacao_tributaria option:selected').text() || 'Não selecionado';
        var municipioPrestacao = $('#municipio_prestacao option:selected').text() || 'Não selecionado';
        var situacaoTrib = $('#ibs_cbs_situacao_tributaria option:selected').text() || 'Não selecionado';
        var compraGov = $('#compra_governamental').val() == '1' ? '✅ Sim' : '❌ Não';
        var tomadorDest = $('#indicador_destinatario').val() == '0' ? '✅ Sim' : '❌ Não';
        var consumidorFinal = $('#consumidor_final').val() == '1' ? '✅ Sim' : '❌ Não';
        
        var html = '<div class="resumo-nota-exato">';
        html += '<div class="cabecalho-resumo">📋 RESUMO DO SERVIÇO</div>';
        html += '<div class="linha-valor"><span class="label-resumo">Valor do Serviço</span><span class="valor-resumo">R$ ' + valor.toFixed(2) + '</span></div>';
        html += '<div class="linha-valor"><span class="label-resumo">Base de Cálculo</span><span class="valor-resumo">R$ ' + baseCalculo.toFixed(2) + '</span></div>';
        html += '<div class="linha-valor"><span class="label-resumo">Valor de ISSQN</span><span class="valor-resumo">R$ ' + valorISS.toFixed(2) + '</span></div>';
        html += '<div class="linha-valor"><span class="label-resumo">Tributos Federais</span><span class="valor-resumo">R$ 0.00</span></div>';
        html += '<div class="linha-valor"><span class="label-resumo">Item da LC 116/2003</span><span class="valor-resumo">07.00</span></div>';
        html += '<div class="linha-valor"><span class="label-resumo">Alíquota (%)</span><span class="valor-resumo">' + aliquota.toFixed(10).replace(/\.?0+$/, '') + '</span></div>';
        
        html += '<div class="tributos-box" style="margin-top:10px;">';
        html += '<div class="linha-valor" style="border-bottom:none;font-weight:600;color:#856404;">📊 Valor aproximado de tributos</div>';
        html += '<div class="linha-valor"><span class="label-resumo">Percentual (%):</span><span class="valor-resumo" style="font-weight:700;">' + percentualTotalTributos.toFixed(2).replace('.', ',') + '</span></div>';
        html += '<div class="linha-valor" style="border-bottom:none;"><span class="label-resumo">Valor:</span><span class="valor-resumo" style="font-weight:700;color:#856404;">R$ ' + totalTributos.toFixed(2) + '</span></div>';
        html += '</div>';
        
        html += '<div style="margin-top:6px;">';
        html += '<div class="detalhe-tributo"><span class="label-tributo">ISS (Imposto Sobre Serviços):</span><span class="valor-tributo">' + aliquota.toFixed(2).replace('.', ',') + '% = R$ ' + valorISS.toFixed(2) + '</span></div>';
        
        if (usarIbsCbs == 1 && tipoRetencao == '2') {
            html += '<div class="detalhe-tributo"><span class="label-tributo">IBS (Imposto sobre Bens e Serviços):</span><span class="valor-tributo">0,10% = R$ ' + valorIBS.toFixed(2) + '</span></div>';
            html += '<div class="detalhe-tributo"><span class="label-tributo">CBS (Contribuição sobre Bens e Serviços):</span><span class="valor-tributo">0,90% = R$ ' + valorCBS.toFixed(2) + '</span></div>';
            html += '<div class="detalhe-tributo" style="border-bottom:1px dashed #e9ecef;padding-bottom:4px;"><span class="label-tributo">Base IBS/CBS:</span><span class="valor-tributo">R$ ' + baseIbsCbs.toFixed(2) + '</span></div>';
        } else {
            html += '<div class="detalhe-tributo"><span class="label-tributo">IBS (Imposto sobre Bens e Serviços):</span><span class="valor-tributo">N/A</span></div>';
            html += '<div class="detalhe-tributo"><span class="label-tributo">CBS (Contribuição sobre Bens e Serviços):</span><span class="valor-tributo">N/A</span></div>';
        }
        
        html += '<div class="detalhe-tributo" style="border-bottom:1px dashed #e9ecef;padding-bottom:4px;"><span class="label-tributo">PIS/COFINS (Tributos Federais):</span><span class="valor-tributo">0,00% = R$ 0.00</span></div>';
        html += '</div>';
        
        html += '<div style="margin-top:6px;">';
        html += '<div class="linha-valor"><span class="label-resumo">Alíquota ISS:</span><span class="valor-resumo">' + aliquota.toFixed(2).replace('.', ',') + '%</span></div>';
        html += '<div class="linha-valor"><span class="label-resumo">Tipo Retenção:</span><span class="valor-resumo">' + retencaoText + '</span></div>';
        html += '<div class="linha-valor"><span class="label-resumo">Regime Tributário:</span><span class="valor-resumo">' + regimeText + '</span></div>';
        html += '</div>';
        
        if (usarIbsCbs == 1) {
            html += '<div class="info-ibs-cbs" style="margin-top:6px;">';
            html += '<div style="font-weight:600;color:#6c757d;margin-bottom:3px;">📋 IBS/CBS</div>';
            html += '<div class="linha-info"><span class="label-resumo">📍 Município Prestação:</span><span class="valor-resumo" style="font-size:0.78rem;">' + municipioPrestacao + '</span></div>';
            html += '<div class="linha-info"><span class="label-resumo">🏷️ Indicador Operação:</span><span class="valor-resumo" style="font-size:0.78rem;">' + indicadorOperacao + '</span></div>';
            html += '<div class="linha-info"><span class="label-resumo">📋 Classificação:</span><span class="valor-resumo" style="font-size:0.78rem;">' + classificacaoTrib + '</span></div>';
            html += '<div class="linha-info"><span class="label-resumo">📌 Situação Tributária:</span><span class="valor-resumo" style="font-size:0.78rem;">' + situacaoTrib + '</span></div>';
            html += '<div class="linha-info"><span class="label-resumo">🏛️ Compra Governamental:</span><span class="valor-resumo">' + compraGov + '</span></div>';
            html += '<div class="linha-info"><span class="label-resumo">👤 Tomador é Destinatário:</span><span class="valor-resumo">' + tomadorDest + '</span></div>';
            html += '<div class="linha-info"><span class="label-resumo">👤 Consumidor Final:</span><span class="valor-resumo">' + consumidorFinal + '</span></div>';
            html += '</div>';
        }
        
        html += '<div class="total-nota">';
        html += '<span>TOTAL DA NOTA</span>';
        html += '<span>R$ ' + totalLiquido.toFixed(2) + '</span>';
        html += '</div>';
        html += '</div>';
        
        $('#resumo_nota').html(html);
    }
    
    $('#valor_servico, #aliquota, #regime_tributario, #tipo_retencao_iss, #codigo_indicador_operacao, #ibs_cbs_classificacao_tributaria, #municipio_prestacao, #ibs_cbs_situacao_tributaria, #compra_governamental, #indicador_destinatario, #consumidor_final').on('change keyup click', atualizarResumo);
    
    function coletarDadosFormulario() {
        var servicoOpt = $('#servico_id').find(':selected');
        var codigoServicoRaw = servicoOpt.data('codigo') || '';
        var codigoServico = codigoServicoRaw.replace(/[^0-9]/g, '');
        
        if (codigoServico.length === 4) {
            codigoServico = codigoServico + '01';
        } else if (codigoServico.length !== 6) {
            codigoServico = codigoServico.padEnd(6, '0').substring(0, 6);
        }
        
        return {
            ref: $('#ref').val().trim(),
            empresa_id: parseInt($('#empresa_id').val()),
            emitente_id: parseInt($('#emitente_id').val()),
            tomador_id: parseInt($('#tomador_id').val()),
            servico_id: parseInt($('#servico_id').val()) || null,
            codigo_servico: codigoServico,
            descricao: $('#descricao').val(),
            valor_servico: parseFloat($('#valor_servico').val()) || 0,
            aliquota: parseFloat($('#aliquota').val()) || 0,
            tipo_retencao_iss: parseInt($('#tipo_retencao_iss').val()) || 0,
            regime_tributario: parseInt($('#regime_tributario').val()) || 0,
            codigo_nbs: $('#codigo_nbs').val(),
            municipio_prestacao: $('#municipio_prestacao').val(),
            data_emissao: $('#data_emissao').val(),
            data_competencia: $('#data_competencia').val(),
            observacoes: $('#observacoes').val(),
            pais_prestacao: $('#pais_prestacao').val(),
            finalidade_emissao: $('#finalidade_emissao').val(),
            consumidor_final: $('#consumidor_final').val(),
            codigo_indicador_operacao: $('#codigo_indicador_operacao').val() || '',
            indicador_destinatario: $('#indicador_destinatario').val() || '0',
            ibs_cbs_situacao_tributaria: $('#ibs_cbs_situacao_tributaria').val() || '000',
            ibs_cbs_classificacao_tributaria: $('#ibs_cbs_classificacao_tributaria').val() || '000001',
            compra_governamental: $('#compra_governamental').val() || '0'
        };
    }
    
    function validarDadosFormulario(validarTodosCampos) {
        var erros = [];
        
        if (!$('#empresa_id').val()) { 
            erros.push('Empresa não selecionada');
            $('#empresa_id').addClass('is-invalid');
        }
        
        if (!$('#emitente_id').val()) { 
            erros.push('Emitente não selecionado');
            $('#emitente_id').addClass('is-invalid');
        }
        
        if (!$('#tomador_id').val()) { 
            erros.push('Tomador não selecionado');
            $('#tomador_id').addClass('is-invalid');
        }
        
        if (validarTodosCampos) {
            if (!$('#servico_id').val()) { 
                erros.push('Serviço não selecionado');
                $('#servico_id').addClass('is-invalid');
            }
            
            var valor = parseFloat($('#valor_servico').val());
            if (!$('#valor_servico').val() || isNaN(valor) || valor <= 0) { 
                erros.push('Valor do serviço inválido (deve ser maior que 0)');
                $('#valor_servico').addClass('is-invalid');
            }
            
            if (!$('#tipo_retencao_iss').val()) { 
                erros.push('Tipo de retenção do ISS não selecionado');
                $('#tipo_retencao_iss').addClass('is-invalid');
            }
            
            if (!$('#regime_tributario').val()) { 
                erros.push('Regime tributário não selecionado');
                $('#regime_tributario').addClass('is-invalid');
            }
            
            if (!$('#codigo_nbs').val()) { 
                erros.push('Código NBS não selecionado');
                $('#codigo_nbs').addClass('is-invalid');
            }
            
            if (!$('#municipio_prestacao').val()) { 
                erros.push('Município de prestação não selecionado');
                $('#municipio_prestacao').addClass('is-invalid');
            }
            
            if ($('.ibs-cbs-section').is(':visible')) {
                if (!$('#codigo_indicador_operacao').val()) { 
                    erros.push('Indicador de Operação não selecionado');
                    $('#codigo_indicador_operacao').addClass('is-invalid');
                }
                
                if (!$('#ibs_cbs_classificacao_tributaria').val()) { 
                    erros.push('Classificação Tributária não selecionada');
                    $('#ibs_cbs_classificacao_tributaria').addClass('is-invalid');
                }
            }
        }
        
        return erros;
    }
    
    function salvarRascunho() {
        limparValidacoes();
        
        var dados = coletarDadosFormulario();
        
        var erros = validarDadosFormulario(false);
        
        if (erros.length > 0) {
            var msg = '❌ Por favor, corrija os seguintes erros para salvar o rascunho:\n\n';
            erros.forEach(function(erro, i) {
                msg += (i + 1) + '. ' + erro + '\n';
            });
            mostrarErro(msg);
            
            var primeiroErro = $('.is-invalid').first();
            if (primeiroErro.length) {
                $('html, body').animate({
                    scrollTop: primeiroErro.offset().top - 150
                }, 300);
                primeiroErro.focus();
            }
            return;
        }
        
        if (dados.valor_servico <= 0) {
            if (!confirm('⚠️ O valor do serviço é 0 ou não foi preenchido. Deseja continuar salvando o rascunho?')) {
                return;
            }
        }
        
        console.log('📤 Salvando rascunho:', dados);
        
        var action = modoEdicao ? 'atualizar_rascunho' : 'salvar_rascunho';
        
        $('#loadingOverlay').show();
        $('#loadingText').text(modoEdicao ? 'Atualizando rascunho...' : 'Salvando rascunho...');
        $('#btn_salvar_rascunho').prop('disabled', true).html('<i class="bi bi-hourglass-split"></i> ' + (modoEdicao ? 'Atualizando...' : 'Salvando...'));
        
        $.ajax({
            url: BASE_URL + '/emitir_nota.php?action=' + action,
            method: 'POST',
            data: JSON.stringify(dados),
            contentType: 'application/json',
            dataType: 'json',
            timeout: 30000,
            success: function(response) {
                $('#loadingOverlay').hide();
                console.log('✅ Resposta do salvar rascunho:', response);
                
                if (response.sucesso) {
                    mostrarSucesso('✅ ' + (modoEdicao ? 'Rascunho atualizado' : 'Rascunho salvo') + ' com sucesso! Referência: ' + response.ref);
                    
                    setTimeout(function() {
                        window.location.href = BASE_URL + '/consultar_notas.php?filtro_status=rascunho&ref=' + encodeURIComponent(response.ref);
                    }, 1500);
                } else {
                    mostrarErro('❌ Erro ao ' + (modoEdicao ? 'atualizar' : 'salvar') + ' rascunho: ' + (response.erro || 'Erro desconhecido'));
                    $('#btn_salvar_rascunho').prop('disabled', false).html('<i class="bi bi-file-earmark"></i> ' + (modoEdicao ? 'Atualizar Rascunho' : 'Salvar Rascunho'));
                }
            },
            error: function(xhr, status, error) {
                $('#loadingOverlay').hide();
                console.error('❌ AJAX Error:', status, error);
                console.error('❌ Status Code:', xhr.status);
                console.error('❌ Resposta:', xhr.responseText);
                
                var msg = 'Erro de comunicação com o servidor';
                if (xhr.status === 0) {
                    msg = 'Servidor não respondeu. Verifique sua conexão.';
                } else if (xhr.status === 404) {
                    msg = 'API não encontrada (404). Verifique o caminho: ' + BASE_URL + '/emitir_nota.php';
                } else if (xhr.status === 500) {
                    msg = 'Erro interno no servidor (500). Verifique os logs.';
                } else if (xhr.responseText) {
                    try {
                        var resp = JSON.parse(xhr.responseText);
                        msg = resp.erro || msg;
                    } catch(e) {
                        msg = 'Erro: ' + xhr.status + ' - ' + xhr.statusText;
                    }
                }
                mostrarErro('❌ ' + msg);
                $('#btn_salvar_rascunho').prop('disabled', false).html('<i class="bi bi-file-earmark"></i> ' + (modoEdicao ? 'Atualizar Rascunho' : 'Salvar Rascunho'));
            },
            complete: function() {
                $('#loadingText').text('Processando...');
            }
        });
    }
    
    function excluirRascunho(ref) {
        if (!confirm('⚠️ Tem certeza que deseja excluir este rascunho?\nEsta ação não pode ser desfeita.')) {
            return;
        }
        
        $('#loadingOverlay').show();
        $('#loadingText').text('Excluindo rascunho...');
        
        $.ajax({
            url: BASE_URL + '/api/excluir_rascunho.php',
            method: 'POST',
            data: JSON.stringify({ ref: ref }),
            contentType: 'application/json',
            dataType: 'json',
            timeout: 15000,
            success: function(response) {
                $('#loadingOverlay').hide();
                if (response.sucesso) {
                    mostrarSucesso('✅ Rascunho excluído com sucesso!');
                    setTimeout(function() {
                        window.location.href = BASE_URL + '/consultar_notas.php';
                    }, 1500);
                } else {
                    mostrarErro('❌ Erro ao excluir rascunho: ' + (response.erro || 'Erro desconhecido'));
                }
            },
            error: function(xhr, status, error) {
                $('#loadingOverlay').hide();
                console.error('❌ Erro ao excluir:', error);
                mostrarErro('❌ Erro ao excluir rascunho: ' + error);
            }
        });
    }
    
    $('#btn_salvar_rascunho').on('click', function(e) {
        e.preventDefault();
        e.stopPropagation();
        console.log('📝 Botão Salvar Rascunho clicado!');
        salvarRascunho();
    });
    
    $('#formEmissao').on('submit', function(e) {
        e.preventDefault();
        e.stopPropagation();
        
        console.log('🔥 FORMULÁRIO SUBMETIDO!');
        limparValidacoes();
        
        var erros = validarDadosFormulario(true);
        
        if (erros.length > 0) {
            console.error('❌ ERROS ENCONTRADOS:', erros);
            var msg = '❌ Por favor, corrija os seguintes erros:\n\n';
            erros.forEach(function(erro, i) {
                msg += (i + 1) + '. ' + erro + '\n';
            });
            mostrarErro(msg);
            
            var primeiroErro = $('.is-invalid').first();
            if (primeiroErro.length) {
                $('html, body').animate({
                    scrollTop: primeiroErro.offset().top - 150
                }, 300);
                primeiroErro.focus();
            }
            return;
        }
        
        console.log('✅ Todas as validações passaram!');
        
        var dados = coletarDadosFormulario();
        
        if (modoEdicao) {
            dados.ref_original = $('#ref_original').val();
        }
        
        var dadosCompletos = {
            empresa_id: dados.empresa_id,
            emitente: { 
                id: dados.emitente_id, 
                cnpj: $('#emitente_id').find(':selected').data('cnpj'), 
                inscricao_municipal: $('#emitente_id').find(':selected').data('inscricao'), 
                codigo_municipio: $('#emitente_id').find(':selected').data('codigo-municipio') 
            },
            tomador: { 
                id: dados.tomador_id, 
                cnpj: $('#tomador_id').find(':selected').data('cnpj'), 
                cpf: $('#tomador_id').find(':selected').data('cpf'), 
                razao_social: $('#tomador_id').find(':selected').data('razao'), 
                email: $('#tomador_id').find(':selected').data('email'),
                logradouro: $('#tomador_id').find(':selected').data('logradouro'),
                numero: $('#tomador_id').find(':selected').data('numero'),
                bairro: $('#tomador_id').find(':selected').data('bairro'),
                cidade: $('#tomador_id').find(':selected').data('cidade'),
                codigo_municipio: $('#tomador_id').find(':selected').data('codigo-municipio'),
                uf: $('#tomador_id').find(':selected').data('uf'),
                cep: $('#tomador_id').find(':selected').data('cep')
            },
            nota: {
                ref: dados.ref,
                codigo_servico: dados.codigo_servico,
                valor_servico: dados.valor_servico,
                descricao: dados.descricao,
                aliquota: dados.aliquota,
                tipo_retencao_iss: dados.tipo_retencao_iss,
                codigo_opcao_simples_nacional: dados.regime_tributario,
                codigo_nbs: dados.codigo_nbs,
                data_emissao: dados.data_emissao,
                data_competencia: dados.data_competencia,
                observacoes: dados.observacoes,
                municipio_prestacao: dados.municipio_prestacao,
                pais_prestacao: dados.pais_prestacao,
                finalidade_emissao: dados.finalidade_emissao,
                consumidor_final: dados.consumidor_final,
                codigo_indicador_operacao: dados.codigo_indicador_operacao,
                indicador_destinatario: dados.indicador_destinatario,
                ibs_cbs_situacao_tributaria: dados.ibs_cbs_situacao_tributaria,
                ibs_cbs_classificacao_tributaria: dados.ibs_cbs_classificacao_tributaria,
                compra_governamental: dados.compra_governamental
            },
            modo_edicao: modoEdicao
        };
        
        console.log('📤 Dados a enviar:', JSON.stringify(dadosCompletos, null, 2));
        
        $('#loadingOverlay').show();
        $('#loadingText').text(modoEdicao ? 'Atualizando e emitindo nota...' : 'Emitindo nota fiscal...');
        $('#btn_emitir').prop('disabled', true).html('<i class="bi bi-hourglass-split"></i> Processando...');
        
        $.ajax({
            url: BASE_URL + '/api/emitir.php',
            method: 'POST',
            data: JSON.stringify(dadosCompletos),
            contentType: 'application/json',
            dataType: 'json',
            timeout: 60000,
            success: function(response) {
                $('#loadingOverlay').hide();
                console.log('✅ Resposta da API:', response);
                
                if (response.sucesso) {
                    mostrarSucesso('✅ Nota emitida! Número: ' + (response.numero_nfse || 'N/A'));
                    setTimeout(function() {
                        window.location.href = BASE_URL + '/consultar_notas.php?ref=' + encodeURIComponent(dados.ref);
                    }, 2000);
                } else {
                    var msg = response.erro?.mensagem || response.erro || 'Erro desconhecido';
                    if (typeof msg === 'object') {
                        msg = JSON.stringify(msg);
                    }
                    mostrarErro('❌ ' + msg);
                }
            },
            error: function(xhr, status, error) {
                $('#loadingOverlay').hide();
                console.error('❌ AJAX Error:', status, error);
                console.error('❌ Status Code:', xhr.status);
                console.error('❌ Resposta:', xhr.responseText);
                
                var msg = 'Erro de comunicação com o servidor';
                if (xhr.status === 0) {
                    msg = 'Servidor não respondeu. Verifique sua conexão.';
                } else if (xhr.status === 404) {
                    msg = 'API não encontrada (404). Verifique o caminho: ' + BASE_URL + '/api/emitir.php';
                } else if (xhr.status === 500) {
                    msg = 'Erro interno no servidor (500). Verifique os logs.';
                } else if (xhr.status === 409) {
                    msg = 'Referência duplicada! Gerando nova referência...';
                    $('#ref').val(gerarReferenciaUnica());
                    mostrarSucesso('🔄 Nova referência gerada: ' + $('#ref').val());
                    return;
                } else if (xhr.responseText) {
                    try {
                        var resp = JSON.parse(xhr.responseText);
                        msg = resp.erro?.mensagem || resp.erro || msg;
                    } catch(e) {
                        msg = 'Erro: ' + xhr.status + ' - ' + xhr.statusText;
                    }
                }
                mostrarErro('❌ ' + msg);
            },
            complete: function() {
                $('#btn_emitir').prop('disabled', false).html('<i class="bi bi-send"></i> ' + (modoEdicao ? 'Atualizar e Emitir' : 'Emitir Nota Fiscal'));
                $('#loadingText').text('Processando...');
            }
        });
    });
    
    var empresaId = $('#empresa_id').val();
    if (empresaId) {
        if (!modoEdicao) {
            carregarEmitentesPorEmpresa(empresaId);
            carregarServicos(empresaId);
        }
        
        var option = $('#empresa_id').find(':selected');
        var ambiente = option.data('ambiente');
        var ambienteTexto = ambiente == 'producao' ? 'PRODUÇÃO' : 'HOMOLOGAÇÃO';
        $('#info_empresa_card').html(
            '<strong>' + option.text().split(' ')[0] + '</strong><br>' +
            '<span class="badge bg-' + (ambiente == 'producao' ? 'danger' : 'warning') + '">' + ambienteTexto + '</span>'
        );
    }
    
    if ($('#emitente_id').val()) {
        carregarConfiguracoesEmitente($('#emitente_id').val());
    }
    
    if ($('#tomador_id').val()) {
        $('#tomador_id').trigger('change');
    }
    
    if (modoEdicao) {
        setTimeout(atualizarResumo, 300);
    } else {
        setTimeout(atualizarResumo, 500);
    }
});
</script>

<?php
ob_end_flush();
include 'includes/footer.php';
?>