HEX
Server: LiteSpeed
System: Linux cp01.bhostbrasil.com.br 5.14.0-611.16.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Mon Dec 22 03:40:39 EST 2025 x86_64
User: onlyfibr (1083)
PHP: 8.2.31
Disabled: NONE
Upload Files
File: /home/onlyfibr/.trash/assinar.php.3
<?php
    // HABILITAR ERROS PARA DEBUG ------------//
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);
    // -------------------------------------- //

    $pageTitle = 'Pré-Cadastro de Novo Assinante';

    session_start();
    require_once 'includes/config/config.php';
    require_once 'includes/functions/functions.php';

    $salvar_no_banco_de_dados = true; // Defina true para salvar no DB, false para apenas API

    $mensagem_erro                 = $mensagem_erro_db ?? '';
    $mensagem_sucesso              = '';
    $form_data                     = ($_SERVER['REQUEST_METHOD'] === 'POST' && ! empty($_SESSION['precadastro_error'])) ? $_POST : [];
    $lista_planos_disponiveis      = [];
    $lista_vencimentos_disponiveis = [];
    unset($_SESSION['precadastro_error']);

    if (! $pdo && $salvar_no_banco_de_dados) {
        $mensagem_erro = "Erro crítico: Serviço indisponível (DB Connection).";
    }

    $enviar_para_api_sgp = true;
    if ($pdo) {
        try {
            $stmt_cfg_api = $pdo->query("SELECT enviar_dados_api_sgp FROM configuracoes WHERE id = 1 LIMIT 1");
            $config_api   = $stmt_cfg_api->fetch(PDO::FETCH_ASSOC);
            if ($config_api !== false && isset($config_api['enviar_dados_api_sgp'])) {
                $enviar_para_api_sgp = filter_var($config_api['enviar_dados_api_sgp'], FILTER_VALIDATE_BOOLEAN);
            }
        } catch (\PDOException $e) {
            error_log("Erro ao buscar config de envio API no assinar2.php (PGSQL): " . $e->getMessage());
        }
    } else {
        error_log("PDO indisponível no assinar2.php ao buscar config de envio API (PGSQL).");
    }

    $opcoes_moradia = [
        ''                      => '-- Selecione (Obrigatório) --',
        'Casa Própria'          => 'Casa Própria',
        'Casa Alugada'          => 'Casa Alugada',
        'Casa dos Pais'         => 'Casa dos Pais',
        'Imóvel de Terceiros'   => 'Imóvel de Terceiros',
        'Prefiro não responder' => 'Prefiro não responder',
    ];

    if (! empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
        $action = $_REQUEST['action'] ?? null;
        // ... (Lógica AJAX como na versão anterior, não modificada aqui para brevidade) ...
        // Se a lógica AJAX precisar de $pdo, certifique-se de que está disponível.
        // Por exemplo, ação 'verificar_indicador':
        if ($action === 'verificar_indicador') {
            $indicador_cpfcnpj_input = $_REQUEST['indicador_cpfcnpj'] ?? '';
            $indicador_cpfcnpj_limpo = cleanCpfCnpj($indicador_cpfcnpj_input);
            $response_data           = ['success' => false, 'message' => 'CPF/CNPJ do indicador inválido.'];

            if (! empty($indicador_cpfcnpj_limpo) && (strlen($indicador_cpfcnpj_limpo) == 11 || strlen($indicador_cpfcnpj_limpo) == 14)) {
                try {
                    $endpointConsulta  = '/api/ura/consultacliente/';
                    $dadosConsulta     = ['cpfcnpj' => $indicador_cpfcnpj_limpo];
                    $responseIndicador = getAPI(BASE_URL, $endpointConsulta, APP_TOKEN, APP_NAME, $dadosConsulta);
                    $dadosApiIndicador = json_decode($responseIndicador, true);

                    if (json_last_error() === JSON_ERROR_NONE && isset($dadosApiIndicador['contratos']) && ! empty($dadosApiIndicador['contratos'])) {
                        $primeiro_contrato_ind = $dadosApiIndicador['contratos'][0];
                        $indicador_nome        = $primeiro_contrato_ind['razaoSocial'] ?? 'Nome não encontrado';
                        $indicador_id          = $primeiro_contrato_ind['clienteId'] ?? null;
                        $response_data         = [
                            'success'        => true,
                            'message'        => 'Que legal! Você foi indicado por seu amigo: ' . htmlspecialchars($indicador_nome),
                            'indicador_id'   => $indicador_id,
                            'indicador_nome' => $indicador_nome,
                        ];
                    } else {
                        $response_data['message'] = 'Cliente/Indicador não localizado em nossa base.';
                    }
                } catch (\Exception $e) {
                    error_log("Exceção ao verificar indicador $indicador_cpfcnpj_limpo (PGSQL): " . $e->getMessage());
                    $response_data['message'] = 'Erro ao verificar indicador.';
                }
            }
            header('Content-Type: application/json');
            echo json_encode($response_data);
            exit;
        }
        // Ação 'get_vendedores'
        elseif ($action === 'get_vendedores') {
            $response_data = ['success' => false, 'vendedores' => [], 'message' => ''];
            try {
                $endpointVendedores = '/api/precadastro/vendedor/list';
                $payloadVendedores  = ['token' => APP_TOKEN, 'app' => APP_NAME];
                $responseVendedores = postApiJson(BASE_URL, $endpointVendedores, $payloadVendedores);
                $dadosApiVendedores = json_decode($responseVendedores, true);

                if (json_last_error() === JSON_ERROR_NONE && is_array($dadosApiVendedores) && empty($dadosApiVendedores['error'])) {
                    foreach ($dadosApiVendedores as $vendedor) {
                        if (isset($vendedor['id']) && isset($vendedor['nome'])) {
                            $response_data['vendedores'][] = ['id' => $vendedor['id'], 'nome' => $vendedor['nome']];
                        }
                    }
                    if (! empty($response_data['vendedores'])) {
                        $response_data['success'] = true;
                    } else {
                        $response_data['message'] = 'Nenhum vendedor encontrado.';
                    }
                } else {
                    $response_data['message'] = 'Erro ao carregar vendedores da API.';
                    error_log("Ajax get_vendedores error (PGSQL): " . $responseVendedores);
                }
            } catch (\Exception $e) {
                $response_data['message'] = 'Erro no servidor ao buscar vendedores.';
                error_log("Exceção Ajax get_vendedores (PGSQL): " . $e->getMessage());
            }
            header('Content-Type: application/json');
            echo json_encode($response_data);
            exit;
        }
        // Se ação Ajax não reconhecida
        header('Content-Type: application/json');
        echo json_encode(['success' => false, 'message' => 'Ação desconhecida.']);
        exit;
    }

    if (empty($mensagem_erro)) {
        // ... (Lógica para buscar planos e vencimentos da API como na versão anterior) ...
        $erro_busca_api = false;
        try {
            // 1. Buscar Planos
            $endpointPlanos = '/api/precadastro/plano/list';
            $payloadPlanos  = ['token' => APP_TOKEN, 'app' => APP_NAME];
            $responsePlanos = postApiJson(BASE_URL, $endpointPlanos, $payloadPlanos);
            $dadosApiPlanos = json_decode($responsePlanos, true);

            if (json_last_error() === JSON_ERROR_NONE && is_array($dadosApiPlanos) && empty($dadosApiPlanos['error'])) {
                foreach ($dadosApiPlanos as $plano) {
                    if (isset($plano['id']) && isset($plano['descricao']) && (! isset($plano['tipo']) || strtolower($plano['tipo']) === 'internet')) {
                        $lista_planos_disponiveis[] = $plano;
                    }
                }
            } else { $erro_busca_api = true;
                error_log("Erro API Planos Precadastro (PGSQL): " . $responsePlanos);}

            // 2. Buscar Vencimentos
            $endpointVenc = '/api/precadastro/vencimento/list';
            $payloadVenc  = ['token' => APP_TOKEN, 'app' => APP_NAME];
            $responseVenc = postApiJson(BASE_URL, $endpointVenc, $payloadVenc);
            $dadosApiVenc = json_decode($responseVenc, true);

            if (json_last_error() === JSON_ERROR_NONE && is_array($dadosApiVenc) && empty($dadosApiVenc['error'])) {
                foreach ($dadosApiVenc as $venc) {
                    if (isset($venc['id']) && isset($venc['dia'])) {
                        $lista_vencimentos_disponiveis[] = $venc;
                    }
                }
                usort($lista_vencimentos_disponiveis, function ($a, $b) {return ($a['dia'] ?? 99) <=> ($b['dia'] ?? 99);});
            } else { $erro_busca_api = true;
                error_log("Erro API Vencimentos Precadastro (PGSQL): " . $responseVenc);}

            if ($erro_busca_api && empty($mensagem_erro)) {$mensagem_erro .= ($mensagem_erro ? "<br>" : "") . "Aviso: Não foi possível carregar opções de plano/vencimento.";}
        } catch (\Exception $e) {
            $mensagem_erro .= ($mensagem_erro ? "<br>" : "") . "Erro inesperado ao carregar opções.";
            error_log("Exceção ao buscar planos/venc (PGSQL): " . $e->getMessage());
        }
    }

    if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['enviar_precadastro'])) {
        // Coleta de Dados (como na versão anterior)
        $precisa_Processar = false;
        $tipo_pessoa       = $_POST['tipo_pessoa'] ?? null;
        $nome              = trim($_POST['nome'] ?? '');
        // ... (restante da coleta de dados)
        $cpf_cnpj_input            = trim($_POST['cpfcnpj'] ?? '');
        $cpf_cnpj                  = cleanCpfCnpj($cpf_cnpj_input);
        $email                     = filter_var(trim($_POST['email'] ?? ''), FILTER_SANITIZE_EMAIL);
        $celular_input             = trim($_POST['celular'] ?? '');
        $celular                   = cleanCpfCnpj($celular_input);
        $cep_input                 = trim($_POST['cep'] ?? '');
        $cep                       = cleanCpfCnpj($cep_input);
        $logradouro                = trim($_POST['logradouro'] ?? '');
        $numero                    = trim($_POST['numero'] ?? '');
        $complemento               = trim($_POST['complemento'] ?? '');
        $bairro                    = trim($_POST['bairro'] ?? '');
        $cidade                    = trim($_POST['cidade'] ?? '');
        $uf                        = $_POST['uf'] ?? '';
        $pontoreferencia           = trim($_POST['pontoreferencia'] ?? '');
        $tipo_moradia              = trim($_POST['tipo_moradia'] ?? '');
        $plano_id_selecionado      = filter_input(INPUT_POST, 'plano_id', FILTER_VALIDATE_INT);
        $vencimento_id_selecionado = filter_input(INPUT_POST, 'vencimento_id', FILTER_VALIDATE_INT);
        $vendedor_id_input         = $_POST['vendedor_id'] ?? null;
        $vendedor_id               = (is_numeric($vendedor_id_input)) ? filter_var($vendedor_id_input, FILTER_VALIDATE_INT) : null;
        $observacao                = trim($_POST['observacao'] ?? '');
        $lgpd_aceite               = isset($_POST['lgpd_accept']) && $_POST['lgpd_accept'] === 'on';
        $ip_origem                 = $_SERVER['REMOTE_ADDR'] ?? $_SERVER['HTTP_CLIENT_IP'] ?? $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['HTTP_X_FORWARDED'] ?? $_SERVER['HTTP_FORWARDED_FOR'] ?? $_SERVER['HTTP_FORWARDED'] ?? 'N/A';
        $rg                        = ($tipo_pessoa === 'PF') ? trim($_POST['rg'] ?? '') : null;
        $rg_emissor                = ($tipo_pessoa === 'PF') ? trim($_POST['rg_emissor'] ?? '') : null;
        $datanasc                  = ($tipo_pessoa === 'PF') ? trim($_POST['datanasc'] ?? '') : null;
        $nome_fantasia             = ($tipo_pessoa === 'PJ') ? trim($_POST['nomefantasia'] ?? '') : null;
        $insc_estadual             = ($tipo_pessoa === 'PJ') ? trim($_POST['insc_estadual'] ?? '') : null;
        $foi_indicado              = isset($_POST['foi_indicado']) && $_POST['foi_indicado'] === 'sim';
        $indicador_cpfcnpj_input   = ($foi_indicado) ? trim($_POST['indicador_cpfcnpj'] ?? '') : null;
        $indicador_cpfcnpj         = cleanCpfCnpj($indicador_cpfcnpj_input);

        // Validação Server-Side (como na versão anterior)
        $erros_validacao = [];
        // ... (toda a lógica de validação original)
        if (empty($tipo_pessoa) || ! in_array($tipo_pessoa, ['PF', 'PJ'])) {$erros_validacao['tipo_pessoa'] = "Tipo Pessoa inválido.";}
        if (empty($nome)) {$erros_validacao['nome'] = "Nome/Razão Social obrigatório.";}
        if (empty($cpf_cnpj)) {$erros_validacao['cpfcnpj'] = "CPF/CNPJ obrigatório.";} elseif (($tipo_pessoa === 'PF' && strlen($cpf_cnpj) !== 11) || ($tipo_pessoa === 'PJ' && strlen($cpf_cnpj) !== 14)) {$erros_validacao['cpfcnpj'] = "Formato CPF/CNPJ inválido.";}
        if (empty($email) || ! filter_var($email, FILTER_VALIDATE_EMAIL)) {$erros_validacao['email'] = "E-mail inválido.";}
        if (empty($celular) || strlen($celular) < 10 || strlen($celular) > 11) {$erros_validacao['celular'] = "Celular inválido (10 ou 11 números).";}
        if (isset($_POST['cep'])) {
            $cep_sanitizado   = preg_replace('/[^0-9]/', '', $_POST['cep']);
            $_POST['cep']     = $cep_sanitizado;
            $form_data['cep'] = $cep_sanitizado;
            if (empty($cep_sanitizado) || strlen($cep_sanitizado) != 8) {$erros_validacao['cep'] = 'CEP inválido. Deve conter 8 números.';}
        } else { $erros_validacao['cep'] = 'CEP obrigatório.';}
        if (empty($logradouro)) {$erros_validacao['logradouro'] = "Logradouro obrigatório.";}
        if (empty($numero)) {$erros_validacao['numero'] = "Número obrigatório.";}
        if (empty($bairro)) {$erros_validacao['bairro'] = "Bairro obrigatório.";}
        if (empty($cidade)) {$erros_validacao['cidade'] = "Cidade obrigatória.";}
        if (empty($uf) || strlen($uf) !== 2) {$erros_validacao['uf'] = "UF inválida (2 letras).";}
        $opcoes_moradia_validas = array_keys($opcoes_moradia);
        if (empty($tipo_moradia) || ! in_array($tipo_moradia, $opcoes_moradia_validas) || $tipo_moradia === '') {$erros_validacao['tipo_moradia'] = "Por favor, selecione uma opção válida para tipo de moradia.";}
        if (empty($plano_id_selecionado)) {$erros_validacao['plano_id'] = "Selecione um Plano.";}
        if (empty($vencimento_id_selecionado)) {$erros_validacao['vencimento_id'] = "Selecione um Vencimento.";}
        $vendedor_selecionado_sim = isset($_POST['vendedor_opcao']) && $_POST['vendedor_opcao'] === 'sim';
        if ($vendedor_selecionado_sim && empty($vendedor_id)) {$erros_validacao['vendedor_id'] = "Selecione um vendedor ou marque 'Não'.";}
        if (! $lgpd_aceite) {$erros_validacao['lgpd_accept'] = "Aceite os Termos.";}
        if ($tipo_pessoa === 'PF') {
            if (empty($datanasc)) {$erros_validacao['datanasc'] = "Data Nascimento obrigatória (PF).";} elseif (($dt_obj = DateTime::createFromFormat('Y-m-d', $datanasc)) === false || $dt_obj->format('Y-m-d') !== $datanasc) {$erros_validacao['datanasc'] = "Data Nascimento inválida (AAAA-MM-DD).";}
        }
        if ($foi_indicado && empty($indicador_cpfcnpj)) {$erros_validacao['indicador_cpfcnpj'] = "Digite o CPF/CNPJ do indicador ou marque 'Não'.";}

        if (empty($erros_validacao)) {
            $db_insert_id        = null;
            $api_success         = false;
            $api_response_msg    = '';
            $indicador_id_sgp_db = null;
            $indicador_nome_db   = null;

            if ($foi_indicado && ! empty($indicador_cpfcnpj)) {
                // ... (Lógica de revalidar indicador como na versão anterior) ...
                try {
                    $endpointConsulta  = '/api/ura/consultacliente/';
                    $dadosConsulta     = ['cpfcnpj' => $indicador_cpfcnpj];
                    $responseIndicador = getAPI(BASE_URL, $endpointConsulta, APP_TOKEN, APP_NAME, $dadosConsulta);
                    $dadosApiIndicador = json_decode($responseIndicador, true);
                    if (json_last_error() === JSON_ERROR_NONE && isset($dadosApiIndicador['contratos']) && ! empty($dadosApiIndicador['contratos'])) {
                        $primeiro_contrato_ind = $dadosApiIndicador['contratos'][0];
                        $indicador_id_sgp_db   = $primeiro_contrato_ind['clienteId'] ?? null;
                        $indicador_nome_db     = $primeiro_contrato_ind['razaoSocial'] ?? null;
                    } else {error_log("Pré-cadastro (PGSQL): Indicador $indicador_cpfcnpj não encontrado na re-validação SGP.");}
                } catch (\Exception $e) {error_log("Erro ao re-validar indicador $indicador_cpfcnpj (PGSQL): " . $e->getMessage());}
            }

            if ($salvar_no_banco_de_dados) {
                if (! $pdo) {
                    $mensagem_erro = "Erro crítico: Não foi possível conectar ao banco de dados para salvar o pré-cadastro.";
                } else {
                    try {
                        // ... (Lógica de INSERT no DB como na versão anterior) ...
                        if (! in_array($tipo_pessoa, ['PF', 'PJ'])) {throw new Exception("Tipo de pessoa inválido");}
                        $tipo_db             = 'precadastro';
                        $status_proc_db      = 'em_analise';
                        $rg_value            = ($tipo_pessoa === 'PF') ? $rg : null;
                        $rg_em_value         = ($tipo_pessoa === 'PF') ? $rg_emissor : null;
                        $datanasc_value      = ($tipo_pessoa === 'PF' && ! empty($datanasc)) ? $datanasc : null;
                        $nome_fantasia_value = ($tipo_pessoa === 'PJ') ? $nome_fantasia : null;
                        $insc_estadual_value = ($tipo_pessoa === 'PJ') ? $insc_estadual : null;
                        $sqlInsert           = "INSERT INTO precadastros (tipo, tipo_pessoa, nome, email, celular, cpf_cnpj, cidade, estado, observacao, rg, rg_emissor, data_nascimento, nome_fantasia, insc_estadual, cep, logradouro, numero, complemento, bairro, ponto_referencia, tipo_moradia, status_processamento, ip_origem, plano_id_selecionado, vencimento_id_selecionado, lgpd_aceite, foi_indicado, indicador_cpfcnpj, indicador_id_sgp, indicador_nome, vendedor_id, p_processar) VALUES (:tipo, :t_pes, :nome, :email, :cel, :cpfcnpj, :cid, :estado, :obs, :rg, :rg_em, :dn, :nf, :ie, :cep, :logr, :num, :comp, :bai, :pref, :moradia, :status_proc, :ip, :pid, :vid, :lgpd, :foi_ind, :ind_cpf, :ind_id, :ind_nome, :vend_id, :pprocess)";
                        $stmtInsert          = $pdo->prepare($sqlInsert);
                        $stmtInsert->bindValue(':tipo', $tipo_db);
                        $stmtInsert->bindValue(':t_pes', $tipo_pessoa);
                        $stmtInsert->bindValue(':nome', $nome);
                        $stmtInsert->bindValue(':email', $email);
                        $stmtInsert->bindValue(':cel', $celular);
                        $stmtInsert->bindValue(':cpfcnpj', $cpf_cnpj);
                        $stmtInsert->bindValue(':cid', $cidade);
                        $stmtInsert->bindValue(':estado', $uf);
                        $stmtInsert->bindValue(':obs', $observacao ?: null);
                        $stmtInsert->bindValue(':rg', $rg_value);
                        $stmtInsert->bindValue(':rg_em', $rg_em_value);
                        $stmtInsert->bindValue(':dn', $datanasc_value, PDO::PARAM_STR);
                        $stmtInsert->bindValue(':nf', $nome_fantasia_value);
                        $stmtInsert->bindValue(':ie', $insc_estadual_value);
                        $stmtInsert->bindValue(':cep', $cep);
                        $stmtInsert->bindValue(':logr', $logradouro);
                        $stmtInsert->bindValue(':num', $numero);
                        $stmtInsert->bindValue(':comp', $complemento ?: null);
                        $stmtInsert->bindValue(':bai', $bairro);
                        $stmtInsert->bindValue(':pref', $pontoreferencia ?: null);
                        $stmtInsert->bindValue(':moradia', $tipo_moradia);
                        $stmtInsert->bindValue(':status_proc', $status_proc_db);
                        $stmtInsert->bindValue(':ip', $ip_origem);
                        $stmtInsert->bindValue(':pid', $plano_id_selecionado, PDO::PARAM_INT);
                        $stmtInsert->bindValue(':vid', $vencimento_id_selecionado, PDO::PARAM_INT);
                        $stmtInsert->bindValue(':lgpd', $lgpd_aceite, PDO::PARAM_BOOL);
                        $stmtInsert->bindValue(':foi_ind', $foi_indicado, PDO::PARAM_BOOL);
                        $stmtInsert->bindValue(':ind_cpf', $indicador_cpfcnpj ?: null);
                        $stmtInsert->bindValue(':ind_id', $indicador_id_sgp_db, $indicador_id_sgp_db ? PDO::PARAM_INT : PDO::PARAM_NULL);
                        $stmtInsert->bindValue(':ind_nome', $indicador_nome_db);
                        $stmtInsert->bindValue(':vend_id', $vendedor_id, $vendedor_id ? PDO::PARAM_INT : PDO::PARAM_NULL);
                        $stmtInsert->bindValue(':pprocess', false, PDO::PARAM_BOOL);
                        $stmtInsert->execute();
                        $db_insert_id = $pdo->lastInsertId('precadastros_id_seq');
                    } catch (\PDOException $e) {
                        error_log("Erro DB INSERT pré-cadastro $cpf_cnpj (PGSQL): " . $e->getMessage() . " | SQLState: " . $e->getCode() . " | Query: " . $sqlInsert);
                        $mensagem_erro = "Erro técnico interno [DBI-" . $e->getCode() . "]. Não foi possível registrar seu pré-cadastro.";
                        $db_insert_id  = null;
                    }
                }
            }

            $prosseguir_para_api = false;
            if ($salvar_no_banco_de_dados) {
                if ($db_insert_id !== null && $db_insert_id !== false) {$prosseguir_para_api = true;}
            } else { $prosseguir_para_api = true;}

            if ($prosseguir_para_api && empty($mensagem_erro)) {
                $api_success       = false;
                $api_response_msg  = '';
                $precisa_Processar = false;

                if ($enviar_para_api_sgp) {
                    // ... (Lógica de montagem $payloadApi e chamada API como na versão anterior) ...
                    $endpointApi         = ($tipo_pessoa === 'PF') ? '/api/precadastro/F' : '/api/precadastro/J';
                    $observacao_para_api = "Tipo de Moradia: " . $tipo_moradia . "\n";
                    $observacao_para_api .= "Indicador CPF/CNPJ: " . ($foi_indicado ? $indicador_cpfcnpj : 'Não informado');
                    if (! empty($observacao)) {$observacao_para_api .= "\n\nObservações do usuário:\n" . $observacao;}
                    $payloadApi = ['app' => APP_NAME, /* ... outros campos ... */'observacao' => $observacao_para_api/* ... */];
                    // Preencher $payloadApi completo como na versão anterior
                    $payloadApi = ['app' => APP_NAME, 'token' => APP_TOKEN, 'nome' => $nome, 'cpfcnpj' => $cpf_cnpj, 'email' => $email, 'celular' => $celular, 'logradouro' => $logradouro, 'numero' => (int) $numero, 'complemento' => $complemento ?: null, 'bairro' => $bairro, 'cidade' => $cidade, 'cep' => $cep, 'uf' => $uf, 'pais' => 'BR', 'pontoreferencia' => $pontoreferencia ?: null, 'observacao' => $observacao_para_api, 'plano_id' => $plano_id_selecionado, 'vencimento_id' => $vencimento_id_selecionado, 'vendedor_id' => $vendedor_id];
                    if ($tipo_pessoa === 'PF') {$payloadApi['rg'] = $rg;
                        $payloadApi['rg_emissor']                    = $rg_emissor ?: null;
                        $payloadApi['datanasc']                      = $datanasc ?: null;}
                    if ($tipo_pessoa === 'PJ') {$payloadApi['nomefantasia'] = $nome_fantasia ?: null;
                        $payloadApi['insc_estadual']                           = $insc_estadual ?: null;}
                    $payloadApi = array_filter($payloadApi, function ($value) {return $value !== null;});

                    try {
                        $responseApi      = postApiJson(BASE_URL, $endpointApi, $payloadApi);
                        $resultadoApi     = json_decode($responseApi, true);
                        $api_response_msg = $responseApi;
                        if (json_last_error() === JSON_ERROR_NONE && isset($resultadoApi['message']) && stripos($resultadoApi['message'], 'criado com sucesso') !== false) {
                            $api_success = true;
                            if ($salvar_no_banco_de_dados && is_numeric($db_insert_id)) {
                                $precisa_Processar = false;
                                try {
                                    // ... (Lógica de UPDATE status no DB como na versão anterior) ...
                                    $status_final_db  = 'aprovado_api';
                                    $sqlUpdateStatus  = "UPDATE precadastros SET status_processamento = :status, resposta_api = :resp, p_processar = :pprocess WHERE id = :id";
                                    $stmtUpdateStatus = $pdo->prepare($sqlUpdateStatus);
                                    $stmtUpdateStatus->bindValue(':status', $status_final_db);
                                    $stmtUpdateStatus->bindValue(':resp', $api_response_msg);
                                    $stmtUpdateStatus->bindValue(':pprocess', $precisa_Processar, PDO::PARAM_BOOL);
                                    $stmtUpdateStatus->bindValue(':id', $db_insert_id, PDO::PARAM_INT);
                                    $stmtUpdateStatus->execute();
                                } catch (\PDOException $e) {error_log("Erro DB UPDATE status API OK pré-cadastro ID $db_insert_id (PGSQL): " . $e->getMessage());}
                            }
                            // MODIFICAÇÃO: Define a mensagem de sucesso na sessão mas NÃO redireciona aqui
                            $_SESSION['precadastro_success'] = "Pré-cadastro enviado com sucesso! Você será redirecionado em alguns instantes.";
                            // header("Location: assinar.php"); // REMOVIDO
                            // exit; // REMOVIDO
                            // A página irá recarregar e mostrar a mensagem. O JS cuidará do redirect.

                        } else { // Falha na API SGP
                            $erro_api_msg  = $resultadoApi['message'] ?? ($resultadoApi['msg'] ?? 'Erro desconhecido retornado pela API SGP.');
                            $mensagem_erro = "Erro ao enviar pré-cadastro ao sistema principal: " . htmlspecialchars($erro_api_msg);
                            if ($salvar_no_banco_de_dados && is_numeric($db_insert_id)) {$mensagem_erro = "Pré-cadastro salvo localmente, mas " . lcfirst($mensagem_erro);
                                $precisa_Processar                        = true;}
                            error_log("Erro API pré-cadastro $cpf_cnpj ($endpointApi) (PGSQL). Payload: " . json_encode($payloadApi) . ". Resp: " . $responseApi);
                        }
                    } catch (\Exception $e) { // Exceção na chamada da API
                        $mensagem_erro = "Falha na comunicação com o sistema principal.";
                        if ($salvar_no_banco_de_dados && is_numeric($db_insert_id)) {$mensagem_erro = "Pré-cadastro salvo localmente, mas " . lcfirst($mensagem_erro);
                            $precisa_Processar                        = true;}
                        $api_response_msg = "Erro PHP/cURL: " . $e->getMessage();
                        error_log("Erro GERAL API pré-cadastro $cpf_cnpj (PGSQL): " . $e->getMessage());
                    }
                } else { // Envio para API SGP DESATIVADO
                    $api_success      = true;
                    $api_response_msg = "Envio para API SGP desativado nas configurações.";
                    if ($salvar_no_banco_de_dados && is_numeric($db_insert_id)) {$precisa_Processar = true;}

                    // MODIFICAÇÃO: Define a mensagem de sucesso na sessão mas NÃO redireciona aqui
                    $_SESSION['precadastro_success'] = "Pré-cadastro processado (" . ($salvar_no_banco_de_dados && is_numeric($db_insert_id) ? "salvo localmente" : "dados não salvos localmente") . ", envio API SGP desativado). Você será redirecionado em alguns instantes.";
                    if ($salvar_no_banco_de_dados && is_numeric($db_insert_id)) {
                        try {
                            // ... (Lógica de UPDATE status no DB como na versão anterior) ...
                            $status_final_db  = 'pendente_api_desativada';
                            $sqlUpdateStatus  = "UPDATE precadastros SET status_processamento = :status, resposta_api = :resp, p_processar = :pprocess WHERE id = :id";
                            $stmtUpdateStatus = $pdo->prepare($sqlUpdateStatus);
                            $stmtUpdateStatus->bindValue(':status', $status_final_db);
                            $stmtUpdateStatus->bindValue(':resp', $api_response_msg);
                            $stmtUpdateStatus->bindValue(':pprocess', $precisa_Processar, PDO::PARAM_BOOL);
                            $stmtUpdateStatus->bindValue(':id', $db_insert_id, PDO::PARAM_INT);
                            $stmtUpdateStatus->execute();
                        } catch (\PDOException $e) {error_log("Erro DB UPDATE API desativada pré-cadastro ID $db_insert_id (PGSQL): " . $e->getMessage());}
                    }
                    // header("Location: assinar.php"); // REMOVIDO
                    // exit; // REMOVIDO
                }

                // Se houve erro na API SGP (e $enviar_para_api_sgp era true), atualiza o DB
                if ($salvar_no_banco_de_dados && is_numeric($db_insert_id) && ! $api_success && $enviar_para_api_sgp) {
                    $precisa_Processar = true;
                    try {
                        // ... (Lógica de UPDATE status no DB como na versão anterior) ...
                        $status_final_db  = 'erro_api';
                        $sqlUpdateStatus  = "UPDATE precadastros SET status_processamento = :status, resposta_api = :resp, p_processar = :pprocess WHERE id = :id";
                        $stmtUpdateStatus = $pdo->prepare($sqlUpdateStatus);
                        $stmtUpdateStatus->bindValue(':status', $status_final_db);
                        $stmtUpdateStatus->bindValue(':resp', $api_response_msg);
                        $stmtUpdateStatus->bindValue(':pprocess', $precisa_Processar, PDO::PARAM_BOOL);
                        $stmtUpdateStatus->bindValue(':id', $db_insert_id, PDO::PARAM_INT);
                        $stmtUpdateStatus->execute();
                    } catch (\PDOException $e) {error_log("Erro DB UPDATE status API ERRO pré-cadastro ID $db_insert_id (PGSQL): " . $e->getMessage());}
                }
            } elseif ($salvar_no_banco_de_dados && $db_insert_id === null && empty($mensagem_erro)) {
                $mensagem_erro = "Falha ao registrar o pré-cadastro no banco de dados.";
            }

            if (! empty($mensagem_erro)) {
                $_SESSION['precadastro_error'] = true; // Se houve algum erro não tratado por redirecionamento de sucesso
            } elseif (empty($mensagem_erro) && isset($_SESSION['precadastro_success'])) {
                // Se não houve erro E uma mensagem de sucesso foi setada na sessão,
                // precisamos recarregar a página para exibir a mensagem de sucesso
                // e o script JS cuidar do redirecionamento final.
                // O simples fato de não ter header() aqui fará com que o script continue e
                // a página seja renderizada com $mensagem_sucesso populada.
            }

        } else { // Houve erros de validação do formulário
            $mensagem_erro_validacao       = "Por favor, corrija os campos indicados: " . implode(', ', array_keys($erros_validacao));
            $mensagem_erro                 = ! empty($mensagem_erro) ? $mensagem_erro . "<br>" . $mensagem_erro_validacao : $mensagem_erro_validacao;
            $_SESSION['precadastro_error'] = true;
        }
    } // Fim if POST

    // Lê a mensagem de sucesso da sessão (se existir) para exibir na página atual
    if (isset($_SESSION['precadastro_success'])) {
        $mensagem_sucesso = $_SESSION['precadastro_success'];
        unset($_SESSION['precadastro_success']);
        $form_data = []; // Limpa dados do formulário para não repopular após sucesso
    }

    require_once 'includes/header_public.php';
?>

<div class="header-wrapper">
<div class="container">
    <h1><i class="fas fa-rocket me-2"></i>Pré-Cadastro</h1>
    <p>Preencha o formulário abaixo para solicitar nossos serviços de internet</p>
</div>
</div>

<div class="container">
<div class="form-wrapper animate-fade-in">
    <?php if (! empty($mensagem_erro)): ?>
        <div class="alert alert-danger">
            <i class="fas fa-exclamation-triangle me-2"></i>
            <?php echo nl2br(htmlspecialchars($mensagem_erro)); ?>
        </div>
    <?php endif; ?>

    <?php if (! empty($mensagem_sucesso)): ?>
        <div class="alert alert-success">
            <i class="fas fa-check-circle me-2"></i>
            <?php echo htmlspecialchars($mensagem_sucesso); ?>
        </div>
        <div class="form-section-card text-center">
            <h4 class="mb-4">Obrigado pelo seu interesse!</h4>
            <p>Seu pré-cadastro foi recebido. Nossa equipe analisará suas informações e entrará em contato em breve.</p>
            <div class="final-buttons mt-4">
                <a href="assinar2.php" class="btn btn-secondary">
                    <i class="fas fa-plus-circle me-1"></i> Novo Pré-Cadastro
                </a>
                <a href="index.php" class="btn btn-primary">
                    <i class="fas fa-home me-1"></i> Voltar ao Portal
                </a>
            </div>
        </div>
        <script>
            document.addEventListener('DOMContentLoaded', function() {
                setTimeout(function() {
                    window.location.href = 'assinar.php'; // Redireciona para assinar.php
                }, 5000); // Redireciona após 5000 milissegundos = 5 segundos
            });
        </script>
        <?php endif; ?>

    <?php if (empty($mensagem_sucesso)): // Só mostra o formulário se não houve mensagem de sucesso ?>
		        <form id="form-precadastro" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" novalidate>
		            <input type="hidden" name="enviar_precadastro" value="1">
		            <div class="form-section-card">
		                <legend><i class="fas fa-user-tag me-2"></i>1. Tipo de Cadastro</legend>
		                <div class="mb-3		                                	                                 <?php echo(! empty($erros_validacao['tipo_pessoa'])) ? 'is-invalid' : ''; ?>">
		                    <div class="form-check form-check-inline">
		                        <input class="form-check-input" type="radio" name="tipo_pessoa" id="tipoPF" value="PF" required		                                                                                                                       	                                                                                                                        <?php echo(isset($form_data['tipo_pessoa']) && $form_data['tipo_pessoa'] == 'PF') ? 'checked' : ''; ?>>
		                        <label class="form-check-label" for="tipoPF">Pessoa Física</label>
		                    </div>
		                    <div class="form-check form-check-inline">
		                        <input class="form-check-input" type="radio" name="tipo_pessoa" id="tipoPJ" value="PJ" required		                                                                                                                       	                                                                                                                        <?php echo(isset($form_data['tipo_pessoa']) && $form_data['tipo_pessoa'] == 'PJ') ? 'checked' : ''; ?>>
		                        <label class="form-check-label" for="tipoPJ">Pessoa Jurídica</label>
		                    </div>
		                    <div class="invalid-feedback d-block"><?php echo htmlspecialchars($erros_validacao['tipo_pessoa'] ?? ''); ?></div>
		                </div>
		            </div>

		            <div class="form-section-card">
		                    <legend><i class="fas fa-id-card me-2"></i>2. Dados Pessoais / Empresariais</legend>
		                    <div class="mb-3">
		                        <label for="nome" class="form-label" id="label_nome">Nome Completo / Razão Social <span class="text-danger">*</span></label>
		                        <input type="text" class="form-control		                                                              	                                                               <?php echo(! empty($erros_validacao['nome'])) ? 'is-invalid' : ''; ?>" id="nome" name="nome" value="<?php echo htmlspecialchars($form_data['nome'] ?? ''); ?>" required>
		                        <div class="invalid-feedback"><?php echo htmlspecialchars($erros_validacao['nome'] ?? ''); ?></div>
		                    </div>
		                    <div class="mb-3">
		                        <label for="cpfcnpj" class="form-label" id="label_cpfcnpj">CPF / CNPJ <span class="text-danger">*</span></label>
		                        <input type="text" class="form-control		                                                              	                                                               <?php echo(! empty($erros_validacao['cpfcnpj'])) ? 'is-invalid' : ''; ?>" id="cpfcnpj" name="cpfcnpj" value="<?php echo htmlspecialchars($form_data['cpfcnpj'] ?? ''); ?>" required placeholder="Digite apenas números">
		                        <div class="invalid-feedback"><?php echo htmlspecialchars($erros_validacao['cpfcnpj'] ?? ''); ?></div>
		                    </div>

		                    <div id="camposPF" class="field-hidden		                                                          	                                                           <?php echo(isset($form_data['tipo_pessoa']) && $form_data['tipo_pessoa'] == 'PF') ? 'visible' : ''; ?>">
		                        <div class="row g-3">
		                            <div class="col-md-4 mb-3">
		                                <label for="rg" class="form-label">RG</label>
		                                <input type="text" class="form-control" id="rg" name="rg" value="<?php echo htmlspecialchars($form_data['rg'] ?? ''); ?>">
		                            </div>
		                            <div class="col-md-4 mb-3">
		                                <label for="rg_emissor" class="form-label">Órgão Emissor</label>
		                                <input type="text" class="form-control" id="rg_emissor" name="rg_emissor" placeholder="Ex: SSP/BA" value="<?php echo htmlspecialchars($form_data['rg_emissor'] ?? ''); ?>">
		                            </div>
		                            <div class="col-md-4 mb-3">
		                                <label for="datanasc" class="form-label">Data Nascimento <span class="text-danger">*</span></label>
		                                <input type="date" class="form-control		                                                                      	                                                                       <?php echo(! empty($erros_validacao['datanasc'])) ? 'is-invalid' : ''; ?>" id="datanasc" name="datanasc" value="<?php echo htmlspecialchars($form_data['datanasc'] ?? ''); ?>">
		                                <div class="invalid-feedback"><?php echo htmlspecialchars($erros_validacao['datanasc'] ?? ''); ?></div>
		                            </div>
		                        </div>
		                    </div>
		                    <div id="camposPJ" class="field-hidden		                                                          	                                                           <?php echo(isset($form_data['tipo_pessoa']) && $form_data['tipo_pessoa'] == 'PJ') ? 'visible' : ''; ?>">
		                        <div class="row g-3">
		                            <div class="col-md-6 mb-3">
		                                <label for="nomefantasia" class="form-label">Nome Fantasia</label>
		                                <input type="text" class="form-control		                                                                      	                                                                       <?php echo(! empty($erros_validacao['nomefantasia'])) ? 'is-invalid' : ''; ?>" id="nomefantasia" name="nomefantasia" value="<?php echo htmlspecialchars($form_data['nomefantasia'] ?? ''); ?>">
		                                <div class="invalid-feedback"><?php echo htmlspecialchars($erros_validacao['nomefantasia'] ?? ''); ?></div>
		                            </div>
		                            <div class="col-md-6 mb-3">
		                                <label for="insc_estadual" class="form-label">Inscrição Estadual</label>
		                                <input type="text" class="form-control" id="insc_estadual" name="insc_estadual" value="<?php echo htmlspecialchars($form_data['insc_estadual'] ?? ''); ?>">
		                            </div>
		                        </div>
		                    </div>
		                </div>

		                <div class="form-section-card">
		                    <legend><i class="fas fa-phone-alt me-2"></i>3. Contato</legend>
		                    <div class="row g-3">
		                        <div class="col-md-6 mb-3">
		                            <label for="email" class="form-label">E-mail <span class="text-danger">*</span></label>
		                            <div class="input-group">
		                                <span class="input-group-text"><i class="fas fa-envelope"></i></span>
		                                <input type="email" class="form-control		                                                                       	                                                                        <?php echo(! empty($erros_validacao['email'])) ? 'is-invalid' : ''; ?>" id="email" name="email" value="<?php echo htmlspecialchars($form_data['email'] ?? ''); ?>" required placeholder="seu@email.com">
		                                <div class="invalid-feedback"><?php echo htmlspecialchars($erros_validacao['email'] ?? ''); ?></div>
		                            </div>
		                        </div>
		                        <div class="col-md-6 mb-3">
		                            <label for="celular" class="form-label">Celular/WhatsApp <span class="text-danger">*</span></label>
		                            <div class="input-group">
		                                <span class="input-group-text"><i class="fas fa-mobile-alt"></i></span>
		                                <input type="tel" class="form-control		                                                                     	                                                                      <?php echo(! empty($erros_validacao['celular'])) ? 'is-invalid' : ''; ?>" id="celular" name="celular" value="<?php echo htmlspecialchars($form_data['celular'] ?? ''); ?>" required placeholder="(DDD) 9XXXX-XXXX">
		                                <div class="invalid-feedback"><?php echo htmlspecialchars($erros_validacao['celular'] ?? ''); ?></div>
		                            </div>
		                        </div>
		                    </div>
		                </div>

		                <div class="form-section-card">
		                    <legend><i class="fas fa-map-marker-alt me-2"></i>4. Endereço de Instalação</legend>
		                    <div class="row g-3">
		                        <div class="col-md-4 mb-3">
		                            <label for="cep" class="form-label">CEP <span class="text-danger">*</span></label>
		                            <div class="input-group">
		                                <span class="input-group-text"><i class="fas fa-map-pin"></i></span>
		                                <input type="text" class="form-control		                                                                      	                                                                       <?php echo(! empty($erros_validacao['cep'])) ? 'is-invalid' : ''; ?>" id="cep" name="cep" value="<?php echo htmlspecialchars($form_data['cep'] ?? ''); ?>" required placeholder="00000-000" maxlength="9" pattern="[0-9]{5}-?[0-9]{3}">
		                                <div class="invalid-feedback"><?php echo htmlspecialchars($erros_validacao['cep'] ?? 'CEP inválido.'); ?></div>
		                            </div>
		                            <div id="cep-loading" class="form-text text-muted" style="display: none; font-size: 0.8em;"><i class="fas fa-spinner fa-spin me-1"></i> Buscando...</div>
		                            <div id="cep-error" class="form-text text-danger" style="display: none; font-size: 0.8em;"><i class="fas fa-exclamation-triangle me-1"></i> CEP não encontrado.</div>
		                        </div>
		                        <div class="col-md-8 mb-3">
		                            <label for="logradouro" class="form-label">Logradouro <span class="text-danger">*</span></label>
		                            <input type="text" class="form-control		                                                                  	                                                                   <?php echo(! empty($erros_validacao['logradouro'])) ? 'is-invalid' : ''; ?>" id="logradouro" name="logradouro" value="<?php echo htmlspecialchars($form_data['logradouro'] ?? ''); ?>" required>
		                            <div class="invalid-feedback"><?php echo htmlspecialchars($erros_validacao['logradouro'] ?? ''); ?></div>
		                        </div>
		                        <div class="col-md-3 mb-3">
		                            <label for="numero" class="form-label">Número <span class="text-danger">*</span></label>
		                            <input type="text" class="form-control		                                                                  	                                                                   <?php echo(! empty($erros_validacao['numero'])) ? 'is-invalid' : ''; ?>" id="numero" name="numero" value="<?php echo htmlspecialchars($form_data['numero'] ?? ''); ?>" required>
		                            <div class="invalid-feedback"><?php echo htmlspecialchars($erros_validacao['numero'] ?? ''); ?></div>
		                        </div>
		                        <div class="col-md-4 mb-3">
		                            <label for="complemento" class="form-label">Complemento</label>
		                            <input type="text" class="form-control" id="complemento" name="complemento" value="<?php echo htmlspecialchars($form_data['complemento'] ?? ''); ?>" placeholder="Apto, Bloco, etc.">
		                        </div>
		                        <div class="col-md-5 mb-3">
		                            <label for="bairro" class="form-label">Bairro <span class="text-danger">*</span></label>
		                            <input type="text" class="form-control		                                                                  	                                                                   <?php echo(! empty($erros_validacao['bairro'])) ? 'is-invalid' : ''; ?>" id="bairro" name="bairro" value="<?php echo htmlspecialchars($form_data['bairro'] ?? ''); ?>" required>
		                            <div class="invalid-feedback"><?php echo htmlspecialchars($erros_validacao['bairro'] ?? ''); ?></div>
		                        </div>
		                        <div class="col-md-8 mb-3">
		                            <label for="cidade" class="form-label">Cidade <span class="text-danger">*</span></label>
		                            <input type="text" class="form-control		                                                                  	                                                                   <?php echo(! empty($erros_validacao['cidade'])) ? 'is-invalid' : ''; ?>" id="cidade" name="cidade" value="<?php echo htmlspecialchars($form_data['cidade'] ?? ''); ?>" required>
		                            <div class="invalid-feedback"><?php echo htmlspecialchars($erros_validacao['cidade'] ?? ''); ?></div>
		                        </div>
		                        <div class="col-md-4 mb-3">
		                            <label for="uf" class="form-label">UF <span class="text-danger">*</span></label>
		                            <select class="form-select		                                                      	                                                       <?php echo(! empty($erros_validacao['uf'])) ? 'is-invalid' : ''; ?>" id="uf" name="uf" required>
		                                <option value="">UF</option>
		                                <?php $ufs = ['AC', 'AL', 'AP', 'AM', 'BA', 'CE', 'DF', 'ES', 'GO', 'MA', 'MT', 'MS', 'MG', 'PA', 'PB', 'PR', 'PE', 'PI', 'RJ', 'RN', 'RS', 'RO', 'RR', 'SC', 'SP', 'SE', 'TO'];
                                                foreach ($ufs as $uf_opt) {
                                                    $selected = (isset($form_data['uf']) && $form_data['uf'] == $uf_opt) ? 'selected' : '';
                                                    echo "<option value=\"$uf_opt\" $selected>$uf_opt</option>";
                                            }?>
		                            </select>
		                            <div class="invalid-feedback"><?php echo htmlspecialchars($erros_validacao['uf'] ?? ''); ?></div>
		                        </div>
		                        <div class="col-12 mb-3">
		                            <label for="pontoreferencia" class="form-label">Ponto de Referência</label>
		                            <textarea class="form-control" id="pontoreferencia" name="pontoreferencia" rows="2" placeholder="Ex: Próximo à farmácia, escola, etc."><?php echo htmlspecialchars($form_data['pontoreferencia'] ?? ''); ?></textarea>
		                        </div>
		                    </div>

		                    <div class="mb-3">
		                        <label for="tipo_moradia" class="form-label">Tipo de moradia <span class="text-danger">*</span></label>
		                        <select class="form-select		                                                  	                                                   <?php echo(! empty($erros_validacao['tipo_moradia'])) ? 'is-invalid' : ''; ?>" id="tipo_moradia" name="tipo_moradia" required>
		                            <?php
                                            $valor_selecionado_moradia = $form_data['tipo_moradia'] ?? '';
                                        foreach ($opcoes_moradia as $valor => $texto): ?>
		                                <option value="<?php echo htmlspecialchars($valor); ?>"<?php echo($valor_selecionado_moradia === $valor) ? 'selected' : ''; ?>>
		                                    <?php echo htmlspecialchars($texto); ?>
		                                </option>
		                            <?php endforeach; ?>
                        </select>
                        <div class="invalid-feedback"><?php echo htmlspecialchars($erros_validacao['tipo_moradia'] ?? ''); ?></div>
                    </div>
                </div>

                <div class="form-section-card">
                    <legend><i class="fas fa-wifi me-2"></i>5. Serviço Desejado</legend>
                    <div class="row g-3">
                        <div class="col-md-7 mb-3">
                            <label for="plano_id" class="form-label">Plano Desejado <span class="text-danger">*</span></label>
                            <select class="form-select                                                                                                             <?php echo(! empty($erros_validacao['plano_id'])) ? 'is-invalid' : ''; ?>" id="plano_id" name="plano_id" required<?php echo empty($lista_planos_disponiveis) ? 'disabled' : ''; ?>>
                                <option value="">--                                                                                                       <?php echo empty($lista_planos_disponiveis) ? 'Erro ao carregar' : 'Selecione o Plano'; ?> --</option>
                                <?php foreach ($lista_planos_disponiveis as $plano):
                                        $planoId    = $plano['id'] ?? null;
                                        $planoDesc  = $plano['descricao'] ?? 'Inválido';
                                        $planoValor = $plano['valor'] ?? null;
                                        if ($planoId && $planoDesc != 'Inválido'):
                                            $textoOpt = htmlspecialchars($planoDesc);
                                        if ($planoValor) {$textoOpt .= " - R$ " . number_format($planoValor, 2, ',', '.');}?>
				                                        <option value="<?php echo htmlspecialchars($planoId); ?>"<?php echo(isset($form_data['plano_id']) && $form_data['plano_id'] == $planoId) ? 'selected' : ''; ?>>
				                                            <?php echo $textoOpt; ?>
				                                        </option>
				                                <?php endif;endforeach; ?>
                            </select>
                            <?php if (empty($lista_planos_disponiveis) && empty($mensagem_erro)): ?>
                                <div class="form-text-custom text-danger"><i class="fas fa-exclamation-circle me-1"></i> Erro ao carregar planos.</div>
                            <?php endif; ?>
                            <div class="invalid-feedback"><?php echo htmlspecialchars($erros_validacao['plano_id'] ?? 'Selecione.'); ?></div>
                        </div>
                        <div class="col-md-5 mb-3">
                            <label for="vencimento_id" class="form-label">Vencimento <span class="text-danger">*</span></label>
                            <select class="form-select                                                                                                             <?php echo(! empty($erros_validacao['vencimento_id'])) ? 'is-invalid' : ''; ?>" id="vencimento_id" name="vencimento_id" required<?php echo empty($lista_vencimentos_disponiveis) ? 'disabled' : ''; ?>>
                                <option value="">--                                                                                                       <?php echo empty($lista_vencimentos_disponiveis) ? 'Erro ao carregar' : 'Selecione o Dia'; ?> --</option>
                                <?php foreach ($lista_vencimentos_disponiveis as $venc):
                                        $vencId  = $venc['id'] ?? null;
                                        $vencDia = $venc['dia'] ?? '?';
                                    if ($vencId !== null): ?>
		                                        <option value="<?php echo htmlspecialchars($vencId); ?>"<?php echo(isset($form_data['vencimento_id']) && $form_data['vencimento_id'] == $vencId) ? 'selected' : ''; ?>>
		                                            Dia		                                               	                                                <?php echo htmlspecialchars($vencDia); ?>
		                                        </option>
		                                <?php endif;endforeach; ?>
                            </select>
                            <?php if (empty($lista_vencimentos_disponiveis) && empty($mensagem_erro)): ?>
                                <div class="form-text-custom text-danger"><i class="fas fa-exclamation-circle me-1"></i> Erro ao carregar vencimentos.</div>
                            <?php endif; ?>
                            <div class="invalid-feedback"><?php echo htmlspecialchars($erros_validacao['vencimento_id'] ?? 'Selecione.'); ?></div>
                        </div>
                    </div>
                </div>

                <div class="form-section-card">
                    <legend><i class="fas fa-user-tie me-2"></i>Vendedor                                                                                                                                                 <?php echo htmlspecialchars(defined('NOME_EMPRESA') ? NOME_EMPRESA : 'Empresa'); ?> (Opcional)</legend>
                    <div class="mb-3">
                        <label class="form-label">Este cadastro foi auxiliado por um vendedor?</label>
                        <div class="form-check form-check-inline">
                            <input class="form-check-input" type="radio" name="vendedor_opcao" id="vendedor_sim" value="sim"                                                                                                                                                                                                                                                         <?php echo(isset($form_data['vendedor_opcao']) && $form_data['vendedor_opcao'] == 'sim') ? 'checked' : (isset($form_data['vendedor_id']) && is_numeric($form_data['vendedor_id']) ? 'checked' : ''); ?>>
                            <label class="form-check-label" for="vendedor_sim">Sim</label>
                        </div>
                        <div class="form-check form-check-inline">
                            <input class="form-check-input" type="radio" name="vendedor_opcao" id="vendedor_nao" value="nao"                                                                                                                                                                                                                                                         <?php echo(! isset($form_data['vendedor_opcao']) || $form_data['vendedor_opcao'] == 'nao' || (isset($form_data['vendedor_opcao']) && $form_data['vendedor_opcao'] == 'sim' && empty($form_data['vendedor_id']))) ? 'checked' : ''; ?>>
                            <label class="form-check-label" for="vendedor_nao">Não</label>
                        </div>
                    </div>
                    <div id="vendedor-select-div" class="field-hidden                                                                                                                                           <?php echo(isset($form_data['vendedor_opcao']) && $form_data['vendedor_opcao'] == 'sim' && ! empty($form_data['vendedor_id'])) ? 'visible' : ''; ?>">
                        <div class="mb-3">
                            <label for="vendedor_id" class="form-label">Selecione o Vendedor: <span class="text-danger">*</span></label>
                            <select class="form-select                                                                                                             <?php echo(! empty($erros_validacao['vendedor_id'])) ? 'is-invalid' : ''; ?>" id="vendedor_id" name="vendedor_id" disabled>
                                <option value="">-- Carregando Vendedores --</option>
                                <?php if (isset($form_data['vendedor_id']) && is_numeric($form_data['vendedor_id']) && isset($form_data['vendedor_nome_repopulate'])): ?>
                                    <option value="<?php echo htmlspecialchars($form_data['vendedor_id']); ?>" selected><?php echo htmlspecialchars($form_data['vendedor_nome_repopulate']); ?></option>
                                <?php endif; ?>
                            </select>
                            <div id="vendedor-loading" class="form-text text-muted" style="display: none;"><i class="fas fa-spinner fa-spin me-1"></i> Carregando...</div>
                            <div id="vendedor-error" class="form-text text-danger" style="display: none;"><i class="fas fa-exclamation-triangle me-1"></i> Erro ao carregar.</div>
                            <div class="invalid-feedback"><?php echo htmlspecialchars($erros_validacao['vendedor_id'] ?? 'Selecione o vendedor.'); ?></div>
                        </div>
                    </div>
                </div>

                <div class="form-section-card">
                    <legend><i class="fas fa-users me-2"></i>Programa de Indicação (Opcional)</legend>
                    <div class="mb-3">
                        <label class="form-label">Você foi indicado por algum amigo?</label>
                        <div class="form-check form-check-inline">
                            <input class="form-check-input" type="radio" name="foi_indicado" id="indicado_sim" value="sim"                                                                                                                                                                                                                                                     <?php echo(isset($form_data['foi_indicado']) && $form_data['foi_indicado'] == 'sim') ? 'checked' : ''; ?>>
                            <label class="form-check-label" for="indicado_sim">Sim</label>
                        </div>
                        <div class="form-check form-check-inline">
                            <input class="form-check-input" type="radio" name="foi_indicado" id="indicado_nao" value="nao"                                                                                                                                                                                                                                                     <?php echo(! isset($form_data['foi_indicado']) || $form_data['foi_indicado'] == 'nao') ? 'checked' : ''; ?>>
                            <label class="form-check-label" for="indicado_nao">Não</label>
                        </div>
                    </div>
                    <div id="indicacao-detalhes" class="field-hidden                                                                                                                                         <?php echo(isset($form_data['foi_indicado']) && $form_data['foi_indicado'] == 'sim') ? 'visible' : ''; ?>">
                        <div class="mb-3">
                            <label for="indicador_cpfcnpj" class="form-label">Digite o CPF ou CNPJ do amigo que te indicou: <span class="text-danger">*</span></label>
                            <div class="input-group">
                                <span class="input-group-text"><i class="fas fa-user-friends"></i></span>
                                <input type="text" class="form-control                                                                                                                                             <?php echo(! empty($erros_validacao['indicador_cpfcnpj'])) ? 'is-invalid' : ''; ?>" id="indicador_cpfcnpj" name="indicador_cpfcnpj" value="<?php echo htmlspecialchars($form_data['indicador_cpfcnpj'] ?? ''); ?>" placeholder="Apenas números do CPF/CNPJ">
                                <button class="btn btn-outline-secondary" type="button" id="verificar-indicador">Verificar</button>
                                <div class="invalid-feedback w-100"><?php echo htmlspecialchars($erros_validacao['indicador_cpfcnpj'] ?? ''); ?></div>
                            </div>
                            <div id="indicador-feedback" class="form-text mt-1"></div>
                        </div>
                    </div>
                </div>

                <div class="form-section-card">
                    <legend><i class="fas fa-sticky-note me-2"></i>6. Observações</legend>
                    <div class="mb-3">
                        <label for="observacao" class="form-label">Observações Adicionais</label>
                        <textarea class="form-control                                                                                                           <?php echo(! empty($erros_validacao['observacao'])) ? 'is-invalid' : ''; ?>" id="observacao" name="observacao" rows="4" placeholder="Informações sobre a instalação, melhor horário para contato, etc."><?php echo htmlspecialchars($form_data['observacao'] ?? ''); ?></textarea>
                        <div class="invalid-feedback"><?php echo htmlspecialchars($erros_validacao['observacao'] ?? ''); ?></div>
                    </div>
                </div>

                <div class="form-section-card">
                    <legend><i class="fas fa-check-circle me-2"></i>7. Finalização</legend>
                    <div class="form-check mb-3">
                        <input class="form-check-input                                                                                                             <?php echo(! empty($erros_validacao['lgpd_accept'])) ? 'is-invalid' : ''; ?>" type="checkbox" value="on" id="lgpd_accept" name="lgpd_accept" required>
                        <label class="form-check-label" for="lgpd_accept">
                            Li e concordo com os
                            <a href="#" data-bs-toggle="modal" data-bs-target="#modalTermos">Termos de Uso</a>
                            e a
                            <a href="#" data-bs-toggle="modal" data-bs-target="#modalPolitica">Política de Privacidade</a>.
                            <span class="text-danger">*</span>
                        </label>
                        <div class="invalid-feedback"><?php echo htmlspecialchars($erros_validacao['lgpd_accept'] ?? 'Aceite obrigatório.'); ?></div>
                    </div>
                    <div class="form-group btn-submit-wrapper">
                        <button type="submit" class="btn btn-primary btn-lg w-100 btn-submit">
                            <i class="fas fa-paper-plane me-2"></i> Enviar Pré-Cadastro
                        </button>
                    </div>
                </div>
        </form>
    <?php endif; ?>
</div>
</div>

<div class="modal fade" id="modalTermos" tabindex="-1" aria-labelledby="modalTermosLabel" aria-hidden="true">
    <div class="modal-dialog modal-lg modal-dialog-scrollable">
        <div class="modal-content">
            <div class="modal-header"><h5 class="modal-title" id="modalTermosLabel">Termos de Uso</h5><button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fechar"></button></div>
            <div class="modal-body modal-body-legal"><p><strong>TERMOS E CONDIÇÕES GERAIS...</strong></p></div>
            <div class="modal-footer"><button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Fechar</button></div>
        </div>
    </div>
</div>
<div class="modal fade" id="modalPolitica" tabindex="-1" aria-labelledby="modalPoliticaLabel" aria-hidden="true">
    <div class="modal-dialog modal-lg modal-dialog-scrollable">
        <div class="modal-content">
            <div class="modal-header"><h5 class="modal-title" id="modalPoliticaLabel">Política de Privacidade</h5><button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fechar"></button></div>
            <div class="modal-body modal-body-legal"><p><strong>POLÍTICA DE PRIVACIDADE...</strong></p></div>
            <div class="modal-footer"><button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Fechar</button></div>
        </div>
    </div>
</div>


<?php
    $pageScripts = <<<'EOT'
<script>
// ... (Todo o JavaScript como na versão anterior) ...
$(document).ready(function() {
    // Tipo Pessoa Toggle
    $('input[name="tipo_pessoa"]').on('change', function() {
        const isPF = $('#tipoPF').is(':checked');
        $('#camposPF').toggleClass('visible', isPF).slideToggle(isPF);
        $('#camposPJ').toggleClass('visible', !isPF).slideToggle(!isPF);
        $('#label_nome').text((isPF ? 'Nome Completo' : 'Razão Social') + ' ' + $('#label_nome').find('span').prop('outerHTML'));
        $('#label_cpfcnpj').text((isPF ? 'CPF' : 'CNPJ') + ' ' + $('#label_cpfcnpj').find('span').prop('outerHTML'));
        $('#nomefantasia').prop('required', !isPF);
        $('#datanasc').prop('required', isPF);
    }).trigger('change');

    // Vendedor Toggle
    const radioVendedorSim = $('#vendedor_sim');
    const vendedorDiv = $('#vendedor-select-div');
    const vendedorSelect = $('#vendedor_id');
    let vendedoresCarregados = false;

    function toggleVendedorFields() {
        const isSim = radioVendedorSim.is(':checked');
        vendedorDiv.toggleClass('visible', isSim).slideToggle(isSim);
        vendedorSelect.prop('required', isSim);
        if (isSim && !vendedoresCarregados) {
            loadVendedores();
        } else {
            vendedorSelect.prop('disabled', !isSim);
        }
        if (!isSim) {
            vendedorSelect.val('').removeClass('is-invalid');
        }
    }

    function loadVendedores() {
        $('#vendedor-loading').show();
        $('#vendedor-error').hide();
        vendedorSelect.prop('disabled', true).html('<option value="">Carregando...</option>');

        $.ajax({
            url: $('form').attr('action'), type: 'GET', dataType: 'json', data: { action: 'get_vendedores' },
            success: function(response) {
                vendedorSelect.empty().append('<option value="">-- Selecione o Vendedor --</option>');
                if (response.success && response.vendedores && response.vendedores.length > 0) {
                    $.each(response.vendedores, function(index, vendedor) {
                        if (vendedor.id && vendedor.nome) {
                            var option = $('<option>', { value: vendedor.id, text: vendedor.nome });
                            <?php if (isset($form_data['vendedor_id']) && is_numeric($form_data['vendedor_id'])) : ?>
                                if (vendedor.id == <?php echo json_encode($form_data['vendedor_id']); ?>) {
                                    option.prop('selected', true);
                                }
                            <?php endif; ?>
                            vendedorSelect.append(option);
                        }
                    });
                    vendedoresCarregados = true;
                } else {
                    vendedorSelect.html('<option value="">Erro ao carregar</option>');
                    $('#vendedor-error').text(response.message || 'Não foi possível carregar vendedores.').show();
                }
            },
            error: function() {
                vendedorSelect.html('<option value="">Erro de comunicação</option>');
                $('#vendedor-error').text('Erro de comunicação. Tente novamente.').show();
            },
            complete: function() {
                $('#vendedor-loading').hide();
                if (radioVendedorSim.is(':checked')) {
                    vendedorSelect.prop('disabled', false);
                }
            }
        });
    }
    $('input[name="vendedor_opcao"]').on('change', toggleVendedorFields).trigger('change');

    // Indicação Toggle
    $('input[name="foi_indicado"]').on('change', function() {
        const isSim = $('#indicado_sim').is(':checked');
        $('#indicacao-detalhes').toggleClass('visible', isSim).slideToggle(isSim);
        $('#indicador_cpfcnpj').prop('required', isSim);
        if (!isSim) {
            $('#indicador_cpfcnpj').removeClass('is-invalid').val('');
            $('#indicador-feedback').html('');
        }
    }).trigger('change');

    // Verificar Indicador AJAX
    $('#verificar-indicador').on('click', function() {
        const cpfcnpj = $('#indicador_cpfcnpj').val().replace(/\D/g, '');
        if (cpfcnpj.length < 11) {
            $('#indicador-feedback').html('<span class="text-danger"><i class="fas fa-times-circle me-1"></i> CPF/CNPJ inválido.</span>');
            return;
        }
        $('#indicador-feedback').html('<span class="text-muted"><i class="fas fa-spinner fa-spin me-1"></i> Verificando...</span>');
        $.ajax({
            url: $('form').attr('action'), type: 'GET', dataType: 'json', data: { action: 'verificar_indicador', indicador_cpfcnpj: cpfcnpj },
            success: function(response) {
                const feedbackClass = response.success ? 'text-success' : 'text-danger';
                const iconClass = response.success ? 'fa-check-circle' : 'fa-times-circle';
                $('#indicador-feedback').html('<span class="' + feedbackClass + '"><i class="fas ' + iconClass + ' me-1"></i> ' + response.message + '</span>');
            },
            error: function() {
                $('#indicador-feedback').html('<span class="text-danger"><i class="fas fa-exclamation-triangle me-1"></i> Erro. Tente novamente.</span>');
            }
        });
    });

    // CEP e Endereço
    $('#cep').on('input', function() {
        let value = this.value.replace(/\D/g, '');
        this.value = value.length > 5 ? value.substring(0, 5) + '-' + value.substring(5, 8) : value;
        if (value.length === 8) buscarCep(value);
    });

    function buscarCep(cep) {
        $('#cep-loading').show(); $('#cep-error').hide();
        $.getJSON('https://viacep.com.br/ws/' + cep + '/json/', function(data) {
            if (!data.erro) {
                $('#logradouro').val(data.logradouro); $('#bairro').val(data.bairro);
                $('#cidade').val(data.localidade); $('#uf').val(data.uf); $('#numero').focus();
            } else { $('#cep-error').show(); }
        }).fail(function() { $('#cep-error').show(); }).always(function() { $('#cep-loading').hide(); });
    }

    // Formatação de Inputs (Celular, CPF/CNPJ)
    $('#celular').on('input', function() {
        let v = this.value.replace(/\D/g, '');
        v = v.substring(0, 11);
        if (v.length > 10) v = v.replace(/^(\d{2})(\d{5})(\d{4}).*/, '($1) $2-$3');
        else if (v.length > 6) v = v.replace(/^(\d{2})(\d{4})(\d{0,4}).*/, '($1) $2-$3');
        else if (v.length > 2) v = v.replace(/^(\d{2})(\d{0,5}).*/, '($1) $2');
        this.value = v;
    });

    $('#cpfcnpj').on('input', function() {
        let v = this.value.replace(/\D/g, '');
        if ($('#tipoPF').is(':checked')) {
            v = v.substring(0, 11);
            if (v.length > 9) v = v.replace(/^(\d{3})(\d{3})(\d{3})(\d{2}).*/, '$1.$2.$3-$4');
            else if (v.length > 6) v = v.replace(/^(\d{3})(\d{3})(\d{0,3}).*/, '$1.$2.$3');
            else if (v.length > 3) v = v.replace(/^(\d{3})(\d{0,3}).*/, '$1.$2');
        } else if ($('#tipoPJ').is(':checked')) {
            v = v.substring(0, 14);
            if (v.length > 12) v = v.replace(/^(\d{2})(\d{3})(\d{3})(\d{4})(\d{2}).*/, '$1.$2.$3/$4-$5');
            else if (v.length > 8) v = v.replace(/^(\d{2})(\d{3})(\d{3})(\d{0,4}).*/, '$1.$2.$3/$4');
            else if (v.length > 5) v = v.replace(/^(\d{2})(\d{3})(\d{0,3}).*/, '$1.$2.$3');
            else if (v.length > 2) v = v.replace(/^(\d{2})(\d{0,3}).*/, '$1.$2');
        }
        this.value = v;
    });

    $('form#form-precadastro').on('submit', function() {
        $('#cpfcnpj').val($('#cpfcnpj').val().replace(/\D/g, ''));
        $('#celular').val($('#celular').val().replace(/\D/g, ''));
        $('#cep').val($('#cep').val().replace(/\D/g, ''));
    });
});
</script>
EOT;

require_once 'includes/footer_public.php';
?>