<?php defined('BASEPATH') OR exit('No direct script access allowed');

class Patrimonio extends MX_Controller {

    public function __construct() {
        parent::__construct();
        if (!$this->session->userdata('admin')) redirect('admin/login');
        $this->load->model('Pat_model');
        $this->load->model('cases_model');
        $this->load->model('employees_model');
        $this->load->helper('patrimonial');
        $this->load->library('form_validation');
    }

    // ── Dashboard ────────────────────────────────────────────────
    public function index() {
        $filtros = [
            'status'       => $this->input->get('status'),
            'devedor_tipo' => $this->input->get('tipo'),
            'busca'        => $this->input->get('q'),
        ];

        $data['expedientes']   = $this->Pat_model->get_expedientes($filtros);
        $data['kpis']          = $this->Pat_model->get_kpis();
        $data['alertas']       = $this->Pat_model->get_diligencias_vencendo(30);
        $data['filtros']       = $filtros;
        $data['page_title']    = 'Busca Patrimonial';
        $data['body']          = 'patrimonio/index';
        $this->load->view('template/main', $data);
    }

    // ── View detalhado de um expediente ──────────────────────────
    public function view($id) {
        $exp = $this->Pat_model->get_expediente($id);
        if (!$exp) show_404();

        $data['exp']        = $exp;
        $data['diligencias']= $this->Pat_model->get_diligencias($id);
        $data['bens']       = $this->Pat_model->get_bens($id);
        $data['checklist']  = $this->Pat_model->get_checklist($id);
        $data['peticoes']   = $this->Pat_model->get_peticoes($id);
        $data['pct_check']  = $this->Pat_model->get_pct_checklist($id);
        $data['page_title'] = 'Busca Patrimonial — ' . $exp->devedor_nome;
        $data['body']       = 'patrimonio/view';
        $this->load->view('template/main', $data);
    }

    // ── Novo expediente ──────────────────────────────────────────
    public function add() {
        $data['cases']      = $this->cases_model->get_all();
        $data['page_title'] = 'Nova Busca Patrimonial';
        $data['body']       = 'patrimonio/add';

        if ($this->input->post('ok')) {
            $doc  = preg_replace('/\D/', '', $this->input->post('devedor_doc'));
            $tipo = strlen($doc) === 14 ? 'pj' : 'pf';

            $dados = [
                'case_id'        => (int)$this->input->post('case_id'),
                'devedor_nome'   => $this->input->post('devedor_nome'),
                'devedor_doc'    => pat_formatar_doc($doc),
                'devedor_tipo'   => $tipo,
                'valor_execucao' => (float)str_replace(['.', ','], ['', '.'], $this->input->post('valor_execucao')),
                'obs'            => $this->input->post('obs'),
                'created_by'     => $this->session->userdata('admin')['id'],
            ];

            $id = $this->Pat_model->salvar_expediente($dados);
            $this->session->set_flashdata('message', 'Expediente criado com sucesso.');
            redirect("admin/patrimonio/view/{$id}");
        }

        $this->load->view('template/main', $data);
    }

    // ── Nova diligência ──────────────────────────────────────────
    public function diligencia_add($expediente_id) {
        $exp = $this->Pat_model->get_expediente($expediente_id);
        if (!$exp) show_404();

        if ($this->input->post('ok')) {
            $dados = [
                'expediente_id'     => $expediente_id,
                'sistema'           => $this->input->post('sistema'),
                'data_requerimento' => $this->input->post('data_requerimento'),
                'num_peticao'       => $this->input->post('num_peticao'),
                'validade_meses'    => (int)$this->input->post('validade_meses') ?: 12,
                'resultado'         => $this->input->post('resultado') ?: 'aguardando',
                'data_resultado'    => $this->input->post('data_resultado') ?: null,
                'obs'               => $this->input->post('obs'),
                'created_by'        => $this->session->userdata('admin')['id'],
            ];
            $this->Pat_model->salvar_diligencia($dados);
            $this->session->set_flashdata('message', 'Diligência registrada com sucesso.');
        }
        redirect("admin/patrimonio/view/{$expediente_id}");
    }

    // ── Atualizar resultado de diligência ─────────────────────
    public function diligencia_resultado($id) {
        $dilig = $this->Pat_model->get_diligencia($id);
        if (!$dilig) show_404();

        $dados = [
            'resultado'    => $this->input->post('resultado'),
            'data_resultado' => $this->input->post('data_resultado') ?: null,
            'obs'          => $this->input->post('obs'),
        ];
        $this->Pat_model->atualizar_diligencia($id, $dados);
        $this->session->set_flashdata('message', 'Resultado atualizado.');
        redirect("admin/patrimonio/view/{$dilig->expediente_id}");
    }

    // ── Registrar bem encontrado ──────────────────────────────────
    public function bem_add($expediente_id) {
        $exp = $this->Pat_model->get_expediente($expediente_id);
        if (!$exp) show_404();

        if ($this->input->post('ok')) {
            $valor_str = str_replace(['.', ','], ['', '.'], $this->input->post('valor_estimado'));
            $dados = [
                'expediente_id'  => $expediente_id,
                'diligencia_id'  => $this->input->post('diligencia_id') ?: null,
                'tipo'           => $this->input->post('tipo'),
                'descricao'      => $this->input->post('descricao'),
                'instituicao'    => $this->input->post('instituicao'),
                'valor_estimado' => (float)$valor_str,
                'valor_fipe'     => (float)str_replace(['.', ','], ['', '.'], $this->input->post('valor_fipe') ?: 0),
                'status'         => $this->input->post('status') ?: 'identificado',
                'obs'            => $this->input->post('obs'),
            ];
            $this->Pat_model->salvar_bem($dados);
            $this->session->set_flashdata('message', 'Bem registrado com sucesso.');
        }
        redirect("admin/patrimonio/view/{$expediente_id}");
    }

    // ── Atualizar bem ──────────────────────────────────────────
    public function bem_status($id) {
        $bem = $this->db->where('id', $id)->get('pat_bens')->row();
        if (!$bem) show_404();

        $dados = ['status' => $this->input->post('status')];
        if ($this->input->post('data_bloqueio'))
            $dados['data_bloqueio'] = $this->input->post('data_bloqueio');
        if ($this->input->post('bloqueado'))
            $dados['bloqueado'] = 1;

        $this->Pat_model->atualizar_bem($id, $dados);
        $this->session->set_flashdata('message', 'Status do bem atualizado.');
        redirect("admin/patrimonio/view/{$bem->expediente_id}");
    }

    public function bem_delete($id) {
        $bem = $this->db->where('id', $id)->get('pat_bens')->row();
        if ($bem) {
            $this->Pat_model->deletar_bem($id);
            $this->session->set_flashdata('message', 'Bem removido.');
            redirect("admin/patrimonio/view/{$bem->expediente_id}");
        }
    }

    // ── Checklist ──────────────────────────────────────────────
    public function checklist_update($id) {
        $item = $this->db->where('id', $id)->get('pat_checklist')->row();
        if (!$item) show_404();

        $dados = [
            'realizado'      => $this->input->post('realizado') ? 1 : 0,
            'data_realizacao'=> $this->input->post('data_realizacao') ?: null,
            'resultado'      => $this->input->post('resultado'),
            'via_api'        => $this->input->post('via_api') ? 1 : 0,
            'obs'            => $this->input->post('obs'),
        ];
        $this->Pat_model->atualizar_checklist($id, $dados);

        if ($this->input->is_ajax_request()) {
            echo json_encode(['ok' => true]);
            return;
        }
        redirect("admin/patrimonio/view/{$item->expediente_id}");
    }

    // ── Gerar petição ─────────────────────────────────────────
    public function gerar_peticao($expediente_id) {
        $exp = $this->Pat_model->get_expediente($expediente_id);
        if (!$exp) show_404();

        $sistemas = $this->input->post('sistemas') ?: [];
        if (empty($sistemas)) {
            $this->session->set_flashdata('error', 'Selecione ao menos um sistema.');
            redirect("admin/patrimonio/view/{$expediente_id}");
        }

        // Busca dados do advogado logado
        $admin = $this->session->userdata('admin');
        $adv   = $this->db->where('id', $admin['id'])->get('users')->row();
        // OAB do advogado (campo customizável em pje_advogados)
        $oab_r = $this->db->where('user_id', $admin['id'])->get('pje_advogados')->row();
        if ($oab_r) $adv->oab = $oab_r->oab . '/' . $oab_r->uf_oab;
        else         $adv->oab = 'XXXXX';

        // Última diligência dos sistemas escolhidos
        $this->db->where_in('sistema', $sistemas);
        $this->db->where('expediente_id', $expediente_id);
        $this->db->order_by('data_requerimento', 'DESC');
        $ultima = $this->db->get('pat_diligencias')->row();

        $conteudo = pat_gerar_peticao($exp, $sistemas, $adv, $ultima);

        $dados = [
            'expediente_id' => $expediente_id,
            'sistemas'      => implode(',', $sistemas),
            'conteudo'      => $conteudo,
            'status'        => 'gerada',
            'created_by'    => $admin['id'],
        ];
        $pet_id = $this->Pat_model->salvar_peticao($dados);
        $this->session->set_flashdata('message', 'Petição gerada com sucesso.');
        redirect("admin/patrimonio/peticao/{$pet_id}");
    }

    // ── Ver/baixar petição ────────────────────────────────────
    public function peticao($id) {
        $pet = $this->Pat_model->get_peticao($id);
        if (!$pet) show_404();
        $exp = $this->Pat_model->get_expediente($pet->expediente_id);

        $data['pet']        = $pet;
        $data['exp']        = $exp;
        $data['page_title'] = 'Petição — ' . $exp->devedor_nome;
        $data['body']       = 'patrimonio/peticao';
        $this->load->view('template/main', $data);
    }

    public function peticao_protocolar($id) {
        $dados = [
            'status'         => 'protocolada',
            'data_protocolo' => date('Y-m-d'),
            'num_protocolo'  => $this->input->post('num_protocolo'),
        ];
        $this->Pat_model->atualizar_peticao($id, $dados);
        $pet = $this->Pat_model->get_peticao($id);
        $this->session->set_flashdata('message', 'Petição marcada como protocolada.');
        redirect("admin/patrimonio/view/{$pet->expediente_id}");
    }

    // ── APIs AJAX ─────────────────────────────────────────────

    // Consultar CNPJ/CPF via APIs
    public function api_consultar() {
        if (!$this->input->is_ajax_request()) show_404();
        $doc  = $this->input->post('documento');
        $exp_id = (int)$this->input->post('expediente_id');

        $resultado = ['cnpj' => null, 'datajud' => null];

        $doc_limpo = preg_replace('/\D/', '', $doc);

        // Cache check
        if (strlen($doc_limpo) === 14) {
            $cache = $this->Pat_model->get_cache_api($doc, 'cnpja', 12);
            if (!$cache) {
                $cache = pat_consultar_cnpj($doc);
                $this->Pat_model->salvar_consulta_api([
                    'expediente_id'  => $exp_id ?: null,
                    'api'            => 'cnpja',
                    'documento'      => $doc_limpo,
                    'resposta_json'  => json_encode($cache),
                    'status_http'    => isset($cache['erro']) ? 400 : 200,
                    'created_by'     => $this->session->userdata('admin')['id'],
                ]);
            }
            $resultado['cnpj'] = $cache;
        }

        // DataJud
        $cache_dj = $this->Pat_model->get_cache_api($doc, 'datajud', 24);
        if (!$cache_dj) {
            $cache_dj = pat_consultar_datajud($doc);
            $this->Pat_model->salvar_consulta_api([
                'expediente_id' => $exp_id ?: null,
                'api'           => 'datajud',
                'documento'     => $doc_limpo,
                'resposta_json' => json_encode($cache_dj),
                'status_http'   => 200,
                'created_by'    => $this->session->userdata('admin')['id'],
            ]);
        }
        $resultado['datajud'] = $cache_dj;

        header('Content-Type: application/json');
        echo json_encode($resultado);
    }

    // Consultar FIPE (veículos)
    public function api_fipe() {
        if (!$this->input->is_ajax_request()) show_404();
        $action = $this->input->get('action');

        if ($action === 'marcas') {
            $tipo = $this->input->get('tipo') ?: 'carros';
            $r    = pat_consultar_fipe_marca($tipo);
            echo json_encode($r ?: []);
        } elseif ($action === 'modelos') {
            $r = pat_consultar_fipe_modelos(
                $this->input->get('tipo')     ?: 'carros',
                $this->input->get('marca_id') ?: 0
            );
            echo json_encode($r ?: []);
        } elseif ($action === 'anos') {
            $r = pat_consultar_fipe_anos(
                $this->input->get('tipo')     ?: 'carros',
                $this->input->get('marca_id') ?: 0,
                $this->input->get('modelo_id')?: 0
            );
            echo json_encode($r ?: []);
        } elseif ($action === 'valor') {
            $r = pat_consultar_fipe_valor(
                $this->input->get('tipo')     ?: 'carros',
                $this->input->get('marca_id') ?: 0,
                $this->input->get('modelo_id')?: 0,
                $this->input->get('ano_id')   ?: 0
            );
            // Salva o bem encontrado no expediente se veio expediente_id
            $exp_id = (int)$this->input->get('exp_id');
            if ($r && $exp_id) {
                $desc = ($r['marca'] ?? '') . ' ' . ($r['modelo'] ?? '') . ' ' . ($r['ano'] ?? '');
                $valor_num = (float)preg_replace('/[^\d,]/', '', str_replace('.', '', $r['valor'] ?? '0'));
                $valor_num = (float)str_replace(',', '.', $valor_num);
                $existe = $this->db->where('expediente_id', $exp_id)->where('descricao', $desc)->count_all_results('pat_bens');
                if (!$existe) {
                    $this->db->insert('pat_bens', [
                        'expediente_id' => $exp_id,
                        'tipo'          => 'veiculo',
                        'descricao'     => $desc,
                        'valor_estimado'=> $valor_num,
                        'fonte'         => 'FIPE ' . ($r['codigo'] ?? ''),
                        'status'        => 'localizado',
                        'created_by'    => $this->session->userdata('admin')['id'],
                    ]);
                }
            }
            echo json_encode($r ?: []);
        }
    }

    // ═══════════════════════════════════════════════════════════
    // MÓDULO v3 — Arsenal MÁXIMO (CNPJ completo, DataJud, sanções,
    // Transparência, Offshore, domínio Registro.br, motor de correlação,
    // links de consulta manual orientada, petições por modelo)
    // ═══════════════════════════════════════════════════════════

    public function api_arsenal() {
        if (!$this->input->is_ajax_request()) show_404();
        $this->load->helper('patrimonial');

        $doc      = $this->input->post('documento');
        $exp_id   = (int)$this->input->post('expediente_id');
        $apis     = $this->input->post('apis') ?: [];
        $admin_id = $this->session->userdata('admin')['id'];

        $resultado = ['alertas' => []];
        $exp = $exp_id ? $this->Pat_model->get_expediente($exp_id) : null;
        $doc_limpo = preg_replace('/\D/','',$doc);

        // ── CNPJ ───────────────────────────────────────────────────
        if (in_array('cnpj', $apis) && strlen($doc_limpo) === 14) {
            $cache = $this->Pat_model->get_cache_api($doc, 'brasilapi_cnpj', 12);
            if (!$cache) {
                $cache = pat_consultar_cnpj($doc);
                $this->Pat_model->salvar_consulta_api(['expediente_id'=>$exp_id?:null,'api'=>'brasilapi_cnpj','documento'=>$doc_limpo,'resposta_json'=>json_encode($cache),'status_http'=>isset($cache['erro'])?400:200,'created_by'=>$admin_id]);
                $this->db->insert('pat_investigacoes', ['expediente_id'=>$exp_id?:0,'fonte'=>'brasilapi_cnpj','documento'=>$doc_limpo,'resultado'=>isset($cache['erro'])?'nao_encontrado':'encontrado','resumo'=>isset($cache['erro'])?$cache['erro']:($cache['razao_social'].' — '.$cache['situacao']),'dados_json'=>json_encode($cache),'relevancia'=>'alta','created_by'=>$admin_id]);
            }
            $resultado['cnpj'] = $cache;
        }

        // ── DataJud ────────────────────────────────────────────────
        if (in_array('datajud', $apis)) {
            // Tribunais selecionados na tela (default: tjpe + trt6)
            $tribunais_sel = $this->input->post('tribunais') ?: ['tjpe', 'trt6'];
            sort($tribunais_sel);
            $cache_key = 'datajud_' . implode('_', $tribunais_sel);

            $cache = $this->Pat_model->get_cache_api($doc, $cache_key, 24);
            if (!$cache) {
                // Prioriza o nome digitado pelo usuário na tela (mais preciso que o cadastro)
                $nome_parte = trim($this->input->post('nome_datajud') ?: ($exp ? $exp->devedor_nome : ''));
                $cache = pat_consultar_datajud($doc_limpo, $tribunais_sel, $nome_parte);
                $this->Pat_model->salvar_consulta_api(['expediente_id'=>$exp_id?:null,'api'=>$cache_key,'documento'=>$doc_limpo,'resposta_json'=>json_encode($cache),'status_http'=>200,'created_by'=>$admin_id]);
                $tribunais_str = implode(', ', array_map('strtoupper', $tribunais_sel));
                $resumo = ($cache['total']??0).' processo(s) em '.$tribunais_str.' — '.($cache['como_credor']??0).' como autor/credor';
                if (!empty($cache['tribunais_erro'])) $resumo .= ' (erro: '.implode(', ',$cache['tribunais_erro']).')';
                $this->db->insert('pat_investigacoes', ['expediente_id'=>$exp_id?:0,'fonte'=>$cache_key,'documento'=>$doc_limpo,'resultado'=>($cache['total']??0)>0?'encontrado':'nao_encontrado','resumo'=>$resumo,'dados_json'=>json_encode($cache),'relevancia'=>($cache['como_credor']??0)>0?'alta':'media','created_by'=>$admin_id]);
            }
            $resultado['datajud'] = $cache;
        }

        // ── Portal da Transparência (contratos) ───────────────────
        if (in_array('transparencia', $apis) && strlen($doc_limpo) === 14) {
            $cache = $this->Pat_model->get_cache_api($doc, 'transparencia_contratos', 6);
            if (!$cache) {
                $cache = pat_transparencia_contratos($doc);
                $this->Pat_model->salvar_consulta_api(['expediente_id'=>$exp_id?:null,'api'=>'transparencia_contratos','documento'=>$doc_limpo,'resposta_json'=>json_encode($cache),'status_http'=>200,'created_by'=>$admin_id]);
            }
            $resultado['transparencia'] = $cache;
        }

        // ── NOVO v3: Sanções CEIS/CNEP ────────────────────────────
        if (in_array('sancoes', $apis) && strlen($doc_limpo) === 14) {
            $cache = $this->Pat_model->get_cache_api($doc, 'transparencia_sancoes', 24);
            if (!$cache) {
                $cache = pat_transparencia_sancoes($doc);
                $this->Pat_model->salvar_consulta_api(['expediente_id'=>$exp_id?:null,'api'=>'transparencia_sancoes','documento'=>$doc_limpo,'resposta_json'=>json_encode($cache),'status_http'=>200,'created_by'=>$admin_id]);
            }
            $resultado['sancoes'] = $cache;
        }

        // ── Offshore ───────────────────────────────────────────────
        if (in_array('offshore', $apis) && $exp) {
            $cache = $this->Pat_model->get_cache_api($exp->devedor_nome, 'icij_offshore', 48);
            if (!$cache) {
                $cache = pat_offshore_leaks($exp->devedor_nome);
                $this->Pat_model->salvar_consulta_api(['expediente_id'=>$exp_id,'api'=>'icij_offshore','documento'=>$doc_limpo,'resposta_json'=>json_encode($cache),'status_http'=>200,'created_by'=>$admin_id]);
            }
            $resultado['offshore'] = $cache;
        }

        // ── NOVO v3: Domínio Registro.br ──────────────────────────
        if (in_array('dominio', $apis) && $this->input->post('dominio')) {
            $dom_input = $this->input->post('dominio');
            $cache = pat_consultar_dominio($dom_input);
            if ($cache) {
                $this->Pat_model->salvar_consulta_api(['expediente_id'=>$exp_id?:null,'api'=>'registrobr','documento'=>$doc_limpo,'resposta_json'=>json_encode($cache),'status_http'=>200,'created_by'=>$admin_id]);
            }
            $resultado['dominio'] = $cache;
        }

        // ── Motor de correlação ────────────────────────────────────
        $dados_correlacao = [
            'cnpj' => $resultado['cnpj'] ?? null,
            'datajud' => $resultado['datajud'] ?? null,
            'transparencia' => $resultado['transparencia'] ?? null,
            'sancoes' => $resultado['sancoes'] ?? null,
            'offshore' => $resultado['offshore'] ?? null,
            'dominio' => $resultado['dominio'] ?? null,
            'valor_execucao' => $exp ? $exp->valor_execucao : 0,
        ];
        $alertas = pat_motor_correlacao($dados_correlacao);

        foreach ($alertas as $al) {
            // Evita duplicatas: só insere se não existe alerta do mesmo tipo pendente neste expediente
            $existe = $this->db
                ->where('expediente_id', $exp_id ?: 0)
                ->where('tipo', $al['tipo'])
                ->where('status', 'pendente')
                ->count_all_results('pat_alertas_fraude');
            if ($existe === 0) {
                $this->db->insert('pat_alertas_fraude', [
                    'expediente_id' => $exp_id ?: 0,
                    'tipo'          => $al['tipo'],
                    'descricao'     => $al['descricao'],
                    'fontes'        => $al['fontes'],
                    'tese_juridica' => $al['tese'] ?? '',
                    'relevancia'    => $al['relevancia'] ?? 'media',
                    'status'        => 'pendente',
                ]);
            }
        }
        $resultado['alertas'] = $alertas;

        // ── Links de consulta manual (sempre incluídos) ───────────
        if ($exp) {
            $resultado['links_manuais'] = pat_links_consulta_manual($exp->devedor_nome, $exp->devedor_doc);
        }

        header('Content-Type: application/json');
        echo json_encode($resultado);
    }

    // ── Página do arsenal de investigação ─────────────────────────
    public function arsenal($id) {
        $exp = $this->Pat_model->get_expediente($id);
        if (!$exp) show_404();

        $data['exp']           = $exp;
        $data['investigacoes'] = $this->db->where('expediente_id', $id)->order_by('created_at','DESC')->get('pat_investigacoes')->result();
        $data['alertas_fraude']= $this->db->where('expediente_id', $id)->where('status','pendente')->order_by('created_at','DESC')->get('pat_alertas_fraude')->result();
        $data['page_title']    = 'Arsenal — ' . $exp->devedor_nome;
        $data['body']          = 'patrimonio/arsenal';
        $this->load->view('template/main', $data);
    }

    // ── Gerador de petições por modelo ────────────────────────────
    public function peticao_modelo($expediente_id) {
        $exp  = $this->Pat_model->get_expediente($expediente_id);
        if (!$exp) show_404();

        $tipo = $this->input->get('tipo') ?: 'renovacao_basica';

        // Busca modelo
        $this->db->where('tipo', $tipo)->where('ativo', 1);
        $modelo = $this->db->get('pat_modelos_peticao')->row();
        if (!$modelo) {
            $this->session->set_flashdata('error', 'Modelo de petição não encontrado.');
            redirect("admin/patrimonio/view/{$expediente_id}");
        }

        // Dados do advogado
        $admin = $this->session->userdata('admin');
        $adv   = $this->db->where('id', $admin['id'])->get('users')->row();
        $oab_r = $this->db->where('user_id', $admin['id'])->get('pje_advogados')->row();
        $adv->oab = $oab_r ? $oab_r->oab . '/' . $oab_r->uf_oab : 'XXXXX';

        // Alertas salvos para incluir no template de asfixia
        $alertas = $this->db->where('expediente_id', $expediente_id)->where('status !=', 'descartado')->get('pat_alertas_fraude')->result();
        $resumo_alertas = '';
        foreach ($alertas as $al) {
            $resumo_alertas .= "• {$al->descricao} (Fonte: {$al->fontes})\n";
        }

        // DataJud — processos como credor
        $cache_dj = $this->Pat_model->get_cache_api($exp->devedor_doc, 'datajud', 48);
        $processos_credor = '';
        if ($cache_dj && !empty($cache_dj['processos'])) {
            foreach ($cache_dj['processos'] as $p) {
                if ($p['como_autor'] ?? false) {
                    $processos_credor .= "Processo {$p['numero']} ({$p['tribunal']}); ";
                }
            }
        }

        $variaveis = [
            'case_no'            => $exp->case_no,
            'adv_nome'           => $adv->name,
            'adv_uf'             => 'PE',
            'adv_oab'            => $adv->oab,
            'devedor_nome'       => strtoupper($exp->devedor_nome),
            'devedor_doc'        => $exp->devedor_doc,
            'valor_execucao'     => 'R$ ' . number_format($exp->valor_execucao, 2, ',', '.'),
            'data_ultima_dilig'  => '—',
            'cidade'             => 'Recife/PE',
            'data_extenso'       => date('d') . ' de ' . pat_mes_extenso(date('m')) . ' de ' . date('Y'),
            'resumo_investigacao'=> $resumo_alertas ?: 'Investigação patrimonial realizada conforme documentação em anexo.',
            'alertas_fraude'     => $resumo_alertas ?: '—',
            'processos_como_credor' => $processos_credor ?: 'Nenhum localizado',
            'socios_identificados'  => '—',
            'indicio_idpj'          => '—',
            'empresas_grupo'        => '—',
            'descricao_ostentacao'  => '—',
            'percentual_faturamento'=> '10',
            'evidencias_operacao'   => 'conforme documentação acostada',
        ];

        $conteudo = pat_gerar_peticao_template($modelo->conteudo_template, $variaveis);

        // Salva petição
        $pet_id = $this->Pat_model->salvar_peticao([
            'expediente_id' => $expediente_id,
            'sistemas'      => $tipo,
            'conteudo'      => $conteudo,
            'status'        => 'gerada',
            'created_by'    => $admin['id'],
        ]);

        $this->session->set_flashdata('message', 'Petição gerada com sucesso.');
        redirect("admin/patrimonio/peticao/{$pet_id}");
    }

    // ── Gerenciar alertas de fraude ───────────────────────────────
    public function alerta_usar($id) {
        $this->db->where('id', $id)->update('pat_alertas_fraude', ['status' => 'em_uso']);
        $al = $this->db->where('id', $id)->get('pat_alertas_fraude')->row();
        $this->session->set_flashdata('message', 'Alerta marcado para uso na petição.');
        if ($al) redirect("admin/patrimonio/arsenal/{$al->expediente_id}");
        else redirect('admin/patrimonio');
    }

    public function alerta_descartar($id) {
        $al = $this->db->where('id', $id)->get('pat_alertas_fraude')->row();
        $this->db->where('id', $id)->update('pat_alertas_fraude', ['status' => 'descartado']);
        if ($al) redirect("admin/patrimonio/arsenal/{$al->expediente_id}");
        else redirect('admin/patrimonio');
    }

    // ── Relatório de checklist extrajudicial ──────────────────────
    public function relatorio_checklist($expediente_id) {
        $exp      = $this->Pat_model->get_expediente($expediente_id);
        if (!$exp) show_404();
        $checklist= $this->Pat_model->get_checklist($expediente_id);

        $data['exp']       = $exp;
        $data['checklist'] = $checklist;
        $data['page_title']= 'Relatório de Esgotamento';
        $data['body']      = 'patrimonio/relatorio_checklist';
        $this->load->view('template/main', $data);
    }

    // ═══════════════════════════════════════════════════════════
    // MÓDULO — Configurações de APIs
    // ═══════════════════════════════════════════════════════════

    // Teste de conectividade: /admin/patrimonio/debug_conectividade
    public function debug_conectividade() {
        if (!$this->session->userdata('admin')) redirect('admin/login');

        $testes = [
            'BrasilAPI (funciona)'  => 'https://brasilapi.com.br/api/cnpj/v1/00000000000191',
            'DataJud CNJ'           => 'https://api-publica.datajud.cnj.jus.br/api_publica_tjsp/_search',
            'ViaCEP (funciona)'     => 'https://viacep.com.br/ws/70150900/json/',
            'ICIJ Offshore'         => 'https://offshoreleaks.icij.org/api/v1/reconcile',
            'Portal Transparência'  => 'https://api.portaldatransparencia.gov.br/api-de-dados/contratos?pagina=1',
        ];

        header('Content-Type: text/html; charset=utf-8');
        echo '<style>body{font-family:monospace;font-size:13px;padding:20px;background:#0d1117;color:#e6edf3}
        .ok{color:#2ecc71}.err{color:#e74c3c}.warn{color:#f39c12}
        table{border-collapse:collapse;width:100%}td,th{padding:8px 12px;border:1px solid #30363d;text-align:left}
        th{background:#161b22}h3{color:#58a6ff}</style>';
        echo '<h3>🔍 Diagnóstico de Conectividade do Servidor</h3>';
        echo '<table><tr><th>Destino</th><th>HTTP</th><th>Tempo (ms)</th><th>Resultado</th></tr>';

        foreach ($testes as $nome => $url) {
            $inicio = microtime(true);
            $ch = curl_init($url);
            curl_setopt_array($ch, [
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_TIMEOUT        => 10,
                CURLOPT_SSL_VERIFYPEER => false,
                CURLOPT_NOBODY         => (strpos($url, 'datajud') !== false || strpos($url, 'transparencia') !== false),
                CURLOPT_POST           => strpos($url, 'datajud') !== false,
                CURLOPT_POSTFIELDS     => strpos($url, 'datajud') !== false ? '{"size":1,"query":{"match_all":{}}}' : null,
                CURLOPT_HTTPHEADER     => strpos($url, 'datajud') !== false
                    ? ['Content-Type: application/json', 'Authorization: ApiKey ' . pat_config('datajud_apikey', 'cDZHYzlZa0JadVREZDJCendQbXY6SkJlTzNjLV9TRENyQk1RdnFKZGRQdw==')]
                    : [],
            ]);
            $resp = curl_exec($ch);
            $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            $err  = curl_error($ch);
            curl_close($ch);
            $ms = round((microtime(true) - $inicio) * 1000);

            $status = $code >= 200 && $code < 400 ? '<span class="ok">✓ OK</span>' : '<span class="err">✗ FALHOU</span>';
            if ($err) $status .= ' <span class="err">— ' . htmlspecialchars($err) . '</span>';
            echo '<tr><td>' . $nome . '</td><td class="' . ($code > 0 ? 'ok' : 'err') . '">' . $code . '</td><td>' . $ms . 'ms</td><td>' . $status . '</td></tr>';
        }
        echo '</table>';
        echo '<br><p class="warn">⚠ Se DataJud aparece com HTTP 0 e os demais funcionam, o servidor bloqueia conexões para esse domínio específico.<br>';
        echo 'Solução: entrar em contato com a ServHost para liberar o domínio <strong>api-publica.datajud.cnj.jus.br</strong> no firewall.</p>';
        exit;
    }

    // Debug DataJud: /admin/patrimonio/debug_datajud?nome=AL+EMPREENDIMENTOS&tribunal=tjsp
    public function debug_datajud() {
        if (!$this->session->userdata('admin')) redirect('admin/login');
        $this->load->helper('patrimonial');
        $nome     = $this->input->get('nome')     ?: 'AL EMPREENDIMENTOS';
        $doc      = $this->input->get('doc')      ?: '';
        $tribunal = $this->input->get('tribunal') ?: 'tjsp';
        $apikey   = pat_config('datajud_apikey', 'cDZHYzlZa0JadVREZDJCendQbXY6SkJlTzNjLV9TRENyQk1RdnFKZGRQdw==');
        $url      = "https://api-publica.datajud.cnj.jus.br/api_publica_{$tribunal}/_search";
        $doc_limpo = preg_replace('/\D/', '', $doc);

        // Testa múltiplas estratégias para diagnosticar qual funciona
        $estrategias = [];
        if ($nome) {
            $estrategias['match_phrase (exato)']   = ['match_phrase' => ['partes.nome' => $nome]];
            $estrategias['match AND (palavras)']   = ['match' => ['partes.nome' => ['query' => $nome, 'operator' => 'and']]];
            $estrategias['match OR (qualquer)']    = ['match' => ['partes.nome' => $nome]];
        }
        if ($doc_limpo) {
            $estrategias['documento CNPJ (limpo)'] = ['match' => ['partes.documento' => $doc_limpo]];
            $fmt = preg_replace('/(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})/', '$1.$2.$3/$4-$5', $doc_limpo);
            $estrategias['documento CNPJ (fmt)']   = ['match' => ['partes.documento' => $fmt]];
        }

        header('Content-Type: text/html; charset=utf-8');
        echo '<style>body{font-family:monospace;font-size:13px;padding:20px;background:#0d1117;color:#e6edf3}
        pre{background:#161b22;padding:10px;border-radius:6px;white-space:pre-wrap;font-size:11px;max-height:200px;overflow-y:auto}
        table{border-collapse:collapse;width:100%;margin:12px 0}td,th{padding:7px 10px;border:1px solid #30363d}
        th{background:#161b22}.ok{color:#2ecc71}.err{color:#e74c3c}.warn{color:#f39c12}h3{color:#58a6ff}
        input{background:#161b22;color:#fff;border:1px solid #30363d;padding:3px 8px;margin:0 4px}
        button{background:#1f6feb;color:#fff;border:none;padding:3px 12px;border-radius:4px;cursor:pointer}</style>';
        echo '<h3>🔍 Debug DataJud &mdash; ' . strtoupper($tribunal) . '</h3>';
        echo '<form style="margin-bottom:12px">';
        echo 'Nome: <input name="nome" value="' . htmlspecialchars($nome) . '" style="width:280px">';
        echo ' CNPJ: <input name="doc" value="' . htmlspecialchars($doc) . '" style="width:160px">';
        echo ' Tribunal: <input name="tribunal" value="' . htmlspecialchars($tribunal) . '" style="width:70px">';
        echo ' <button>Testar</button></form>';

        echo '<table><tr><th>Estratégia</th><th>HTTP</th><th>Total encontrado</th><th>Tempo</th><th>1º resultado</th></tr>';

        foreach ($estrategias as $label => $query_clause) {
            $body_e = json_encode([
                'size'    => 3,
                'query'   => $query_clause,
                '_source' => ['numeroProcesso', 'partes', 'dataAjuizamento'],
            ]);
            $ini = microtime(true);
            $ch = curl_init($url);
            curl_setopt_array($ch, [
                CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true,
                CURLOPT_POSTFIELDS => $body_e,
                CURLOPT_HTTPHEADER => ['Content-Type: application/json', 'Authorization: ApiKey ' . $apikey],
                CURLOPT_TIMEOUT => 15, CURLOPT_SSL_VERIFYPEER => false,
            ]);
            $r = curl_exec($ch);
            $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            curl_close($ch);
            $ms = round((microtime(true) - $ini) * 1000);
            $rd = json_decode($r, true);
            $total = $rd['hits']['total']['value'] ?? 0;
            $amostra = '';
            if ($total > 0 && !empty($rd['hits']['hits'])) {
                $src = $rd['hits']['hits'][0]['_source'];
                $p = '';
                foreach (($src['partes'] ?? []) as $parte) {
                    $p .= $parte['nome'] . ' (' . ($parte['polo'] ?? '?') . ') | ';
                }
                $amostra = htmlspecialchars(substr($p, 0, 80)) . '<br><small>' . htmlspecialchars($src['numeroProcesso'] ?? '') . '</small>';
            }
            echo '<tr><td>' . $label . '</td>';
            echo '<td class="' . ($code == 200 ? 'ok' : 'err') . '">' . $code . '</td>';
            echo '<td class="' . ($total > 0 ? 'ok' : 'err') . '"><strong>' . $total . '</strong></td>';
            echo '<td>' . $ms . 'ms</td>';
            echo '<td style="font-size:11px">' . ($amostra ?: '<span class="err">sem resultado</span>') . '</td></tr>';
        }
        echo '</table>';
        echo '<p class="warn">💡 Dica: se todas as estratégias retornam 0, tente variar o nome ou tribunal.</p>';

        // Teste rápido em múltiplos tribunais com match OR (mais tolerante)
        $tribunais_teste = ['tjsp','trt2','tst','tjrj','tjmg','tjpe','trt6','stj'];
        echo '<h3>🔎 Varredura rápida em múltiplos tribunais (match OR)</h3>';
        echo '<table><tr><th>Tribunal</th><th>HTTP</th><th>Total</th><th>Tempo</th><th>1º resultado</th></tr>';
        $query_or = ['match' => ['partes.nome' => $nome]];
        foreach ($tribunais_teste as $trib) {
            $url_t = "https://api-publica.datajud.cnj.jus.br/api_publica_{$trib}/_search";
            $body_t = json_encode(['size' => 2, 'query' => $query_or, '_source' => ['numeroProcesso','partes','dataAjuizamento']]);
            $ini = microtime(true);
            $ch = curl_init($url_t);
            curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true,CURLOPT_POST=>true,CURLOPT_POSTFIELDS=>$body_t,CURLOPT_HTTPHEADER=>['Content-Type: application/json','Authorization: ApiKey '.$apikey],CURLOPT_TIMEOUT=>10,CURLOPT_SSL_VERIFYPEER=>false]);
            $r = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch);
            $ms = round((microtime(true)-$ini)*1000);
            $rd = json_decode($r, true);
            $total = $rd['hits']['total']['value'] ?? 0;
            $amostra = '';
            if ($total > 0 && !empty($rd['hits']['hits'])) {
                $src = $rd['hits']['hits'][0]['_source'];
                $p = '';
                foreach (($src['partes'] ?? []) as $parte) { $p .= $parte['nome'] . ' | '; }
                $amostra = htmlspecialchars(substr($p, 0, 80)) . '<br><small>' . htmlspecialchars($src['numeroProcesso'] ?? '') . '</small>';
            }
            echo '<tr><td><strong>' . strtoupper($trib) . '</strong></td><td class="' . ($code==200?'ok':'err') . '">' . $code . '</td><td class="' . ($total>0?'ok':'err') . '"><strong>' . $total . '</strong></td><td>' . $ms . 'ms</td><td style="font-size:11px">' . ($amostra ?: '<span class="err">-</span>') . '</td></tr>';
        }
        echo '</table>';
        echo '<p style="color:#888;font-size:12px">Se todos os tribunais retornam 0, o DataJud pode não ter processos indexados para esse devedor. O DataJud cobre processos a partir de 2020 na maioria dos tribunais.</p>';
        exit;
    }

    public function configuracoes() {
        $rows = $this->db->get('pat_configuracoes')->result();
        $configs = [];
        foreach ($rows as $r) $configs[$r->chave] = $r->valor;
        $data['configs']    = $configs;
        $data['page_title'] = 'Configurações de APIs';
        $data['body']       = 'patrimonio/configuracoes';
        $this->load->view('template/main', $data);
    }

    public function salvar_configuracoes() {
        $campos = ['datajud_apikey','datajud_tribunais_padrao','transparencia_token','pat_escritorio_nome','pat_oab'];
        $admin_id = $this->session->userdata('admin')['id'];
        foreach ($campos as $chave) {
            $valor = $this->input->post($chave) ?? '';
            $existe = $this->db->where('chave', $chave)->count_all_results('pat_configuracoes');
            if ($existe) {
                $this->db->where('chave', $chave)->update('pat_configuracoes', ['valor' => $valor, 'updated_by' => $admin_id]);
            } else {
                $this->db->insert('pat_configuracoes', ['chave' => $chave, 'valor' => $valor, 'descricao' => $chave, 'updated_by' => $admin_id]);
            }
        }
        $this->session->set_flashdata('sucesso', 'Configurações salvas com sucesso.');
        redirect('admin/patrimonio/configuracoes');
    }

    // ═══════════════════════════════════════════════════════════
    // MÓDULO — Dossiê Estratégico com IA
    // ═══════════════════════════════════════════════════════════

    public function dossie_ia($id = 0) {
        $exp = $id ? $this->Pat_model->get_expediente($id) : null;
        if ($id && !$exp) show_404();
        $data['exp']           = $exp;
        $data['investigacoes'] = $id ? $this->db->where('expediente_id',$id)->where('resultado !=','nao_encontrado')->order_by('created_at','DESC')->get('pat_investigacoes')->result() : [];
        $data['alertas']       = $id ? $this->db->where('expediente_id',$id)->where('status !=','descartado')->get('pat_alertas_fraude')->result() : [];
        $data['bens']          = $id ? $this->db->where('expediente_id',$id)->get('pat_bens')->result() : [];
        $data['page_title']    = 'Dossiê com IA' . ($exp ? ' — ' . $exp->devedor_nome : '');
        $data['body']          = 'patrimonio/dossie_ia';
        $this->load->view('template/main', $data);
    }

    // ═══════════════════════════════════════════════════════════
    // MÓDULO — Diligências Externas (checklist manual de buscas)
    // ═══════════════════════════════════════════════════════════

    public function diligencias_externas($id = 0) {
        $exp = $id ? $this->Pat_model->get_expediente($id) : null;
        if ($id && !$exp) show_404();
        $data['exp']        = $exp;
        $data['page_title'] = 'Diligências Externas' . ($exp ? ' — ' . $exp->devedor_nome : '');
        $data['body']       = 'patrimonio/diligencias_externas';
        $this->load->view('template/main', $data);
    }

    // ═══════════════════════════════════════════════════════════
    // MÓDULO — Consulta FIPE & RENAJUD
    // ═══════════════════════════════════════════════════════════

    public function veiculos($id = 0) {
        $exp = $id ? $this->Pat_model->get_expediente($id) : null;
        $data['exp']        = $exp;
        $data['bens_veic']  = $id ? $this->db->where('expediente_id',$id)->where('tipo','veiculo')->order_by('created_at','DESC')->get('pat_bens')->result() : [];
        $data['page_title'] = 'Consulta FIPE & RENAJUD' . ($exp ? ' — ' . $exp->devedor_nome : '');
        $data['body']       = 'patrimonio/veiculos';
        $this->load->view('template/main', $data);
    }

    // ═══════════════════════════════════════════════════════════
    // MÓDULO — Diagnóstico de Saúde das APIs
    // ═══════════════════════════════════════════════════════════

    public function diagnostico() {
        $data['page_title'] = 'Diagnóstico de APIs';
        $data['body']       = 'patrimonio/diagnostico';
        $this->load->view('template/main', $data);
    }

    // Executa o teste real de todas as APIs (chamado via AJAX)
    public function api_diagnostico() {
        if (!$this->input->is_ajax_request()) show_404();
        $this->load->helper('patrimonial');

        $resultados = pat_diagnostico_completo();

        // Salva o histórico do diagnóstico para acompanhar tendência ao longo do tempo
        $resumo = [
            'total'      => count($resultados),
            'ok'         => count(array_filter($resultados, fn($r) => $r['ok'])),
            'falha'      => count(array_filter($resultados, fn($r) => !$r['ok'])),
            'executado_em' => date('Y-m-d H:i:s'),
            'executado_por' => $this->session->userdata('admin')['id'],
        ];

        $this->db->insert('pat_diagnostico_historico', [
            'resumo_json'    => json_encode($resumo),
            'detalhes_json'  => json_encode($resultados),
            'total_apis'     => $resumo['total'],
            'apis_ok'        => $resumo['ok'],
            'apis_falha'     => $resumo['falha'],
            'created_by'     => $resumo['executado_por'],
        ]);

        header('Content-Type: application/json');
        echo json_encode(['resultados' => $resultados, 'resumo' => $resumo]);
    }

    // Histórico de diagnósticos anteriores (para ver tendência)
    public function diagnostico_historico() {
        $this->db->order_by('created_at', 'DESC');
        $this->db->limit(30);
        $data['historico']  = $this->db->get('pat_diagnostico_historico')->result();
        $data['page_title'] = 'Histórico de Diagnósticos';
        $data['body']       = 'patrimonio/diagnostico_historico';
        $this->load->view('template/main', $data);
    }
}
