<?php

declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class TaskSr60028 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute(<<<SQL
            INSERT INTO sistema.configuracao_sistema (ds_nome, id_usuario_criacao, ds_valor)
            VALUES(
                'DECLARACAO_PROPONENTE_CONFORMIDADE_CONTRATUAL_NOVA_LEI',
                2068,
                'Eu, na qualidade de proponente, declaro para todos os fins legais que:
                        
                <b>A) Veracidade das informações e natureza do risco </b>
                <b>Declaro</b>, sob minha responsabilidade, que <b>não tenho conhecimento</b> de que o risco desta proposta <b>já tenha ocorrido</b> ou seja impossível de ocorrer e que todas <b>as informações prestadas</b> são <b>verdadeiras, completas e atualizadas.</b>
                
                <b>B) Interesse legítimo e vínculo com o objeto </b>
                <b>Reconheço</b> que o <b>interesse segurado</b> decorre de <b>vínculo jurídico ou econômico direto</b> com o objeto do seguro (por exemplo: <b>propriedade, posse, uso, responsabilidade legal ou obrigação contratual</b>), sendo esse vínculo <b>essencial à validade do contrato.</b>
                
                <b>C) Dever de comunicar alterações relevantes</b>
                <b>Comprometo-me a informar imediatamente</b> à seguradora <b>qualquer alteração relevante</b> que afete o <b>interesse legítimo</b>, a <b>qualificação do(s) beneficiário(s)</b> ou a <b>estrutura contratual</b>, ciente de minha <b>responsabilidade civil e penal</b>. 
                
                <b>D) Ciência das consequências por omissão ou má-fé</b>
                Estou ciente de que:
                
                •	se houver <b>omissão dolosa</b> (intencional), <b>perco o direito à indenização</b> e posso ter de <b>ressarcir despesas</b> à seguradora;
                
                •	se houver <b>omissão culposa</b> (sem intenção), a <b>cobertura poderá ser reduzida proporcionalmente</b>;
                
                •	se os fatos omitidos <b>tornarem a cobertura inviável</b> ou <b>incompatível</b> com o contrato, este <b>poderá ser cancelado</b>.
                
                <b>E) Compromisso com Direitos Humanos e Idoneidade</b>
                Declaro, sob minha responsabilidade, que nem eu, nem o(s) beneficiário(s), nem quaisquer terceiros envolvidos na presente proposta de seguro: (i) estamos incluídos em listas oficiais de trabalho escravo, infantil ou em condições análogas à escravidão; (ii) constamos em listas de sanções nacionais ou internacionais, incluindo, mas não se limitando a, ONU, OFAC, União Europeia ou Reino Unido; (iii) fomos condenados por crimes relacionados à lavagem de dinheiro, financiamento ao terrorismo ou infrações correlatas. 
                Estou ciente de que a falsidade ou omissão de qualquer dessas informações implicará a recusa da proposta pela Seguradora. Caso tais situações sejam identificadas durante a vigência da apólice, esta será cancelada de pleno direito.
                
                <b>F) Formação e Informação Prévia</b>
                Confirmo que esta proposta foi feita de forma voluntária, por mim ou por um representante autorizado. Os meus dados de contato (endereço, telefone e e-mail) são corretos e usados para comunicações da seguradora. Comprometo-me a mantê-los atualizados, pois, se não fizer isso, qualquer aviso enviado para esses contatos será considerado recebido. 
                
                Também confirmo que recebi todas as informações importantes para entender o contrato e as consequências de não informar corretamente os dados. Sou responsável por garantir que tudo o que informei é verdadeiro e completo. Respondi ao questionário de risco, quando necessário, com base no que sei, de forma clara e atualizada. 
                
                Tenho ciência dos anexos a esta Proposta, <b>CUJAS CÓPIAS RECEBI NO ATO DA SUA ASSINATURA, ACEITANDO-OS NA ÍNTEGRA</b>. 
                
                Se o seguro exigir informações contínuas (como averbações), sei que deixar de informar dados importantes pode fazer com que eu perca a cobertura, mesmo depois de um sinistro. Se a omissão não for intencional, vou pagar a diferença do prêmio e provar que agi de boa-fé. 
                Reconheço ainda que o corretor de seguros pode me representar, na forma da lei.
                
                <b>G) Conhecimento do Contrato e dos Riscos Excluídos</b>
                Declaro que li e compreendi as Condições Contratuais, conforme indicado no item “Avisos Importantes ao Proponente”, incluindo os riscos excluídos. Reconheço que a ausência de cobertura para tais riscos não configura falha contratual por parte da Seguradora. 
                Tenho ciência de que não terei direito a indenização se estiver em atraso no pagamento do prêmio, se o sinistro ocorrer antes da quitação das parcelas vencidas e não pagas (Art. 763 do Código Civil). 
                
                <b>H) Declaração sobre Interesse Legítimo, Conhecimento do Risco e Veracidade das Informações</b>
                Estou contratando este seguro para proteger algo que me interessa ou que interessa a outra pessoa. Tenho ligação com o que está sendo segurado (como dono, responsável ou usuário). 
                
                <b>Confirmo que: (i) o risco ainda não aconteceu; e (ii) as informações que dei são verdadeiras. </b>
                
                <b>Se eu omitir/esconder algo: (i) <u>de propósito</u>: posso perder o direito ao seguro e ter que devolver o que recebi; (ii) <u>sem querer</u>: o seguro pode cobrir menos ou ser cancelado</b>. 
                <b>Prometo avisar a seguradora se algo mudar que afete o seguro.</b>

                <b>I) Declaração sobre Beneficiários do Seguro</b>
                Os beneficiários que indiquei estão de acordo com a lei e têm um motivo legítimo para serem incluídos no seguro. 
                
                <b>Declaro que: (i) a escolha foi feita corretamente, sem problemas legais; (ii) existe uma relação que justifica essa indicação; (iii) não há fraude ou má intenção.</b>
                
                <b>Me comprometo a avisar a seguradora se algo mudar que afete os beneficiários ou o motivo pelo qual foram indicados.</b>

                <b>J) Cobertura Provisória</b>
                Solicito a cobertura provisória e autorizo o pagamento antecipado do prêmio. Em caso de recusa da proposta, a seguradora deverá comunicar expressamente sua decisão e reembolsar integralmente o valor pago, exceto se houver cobertura efetiva, hipótese em que poderá haver retenção proporcional ao período de vigência. 
                
                <b>K) Declarações sobre os Programas de Subvenção</b>
                <b>DECLARO</b> que tomei ciência das Condições dos Programas de Subvenção ao Prêmio do Seguro dos Governos Federal e Estadual e <b>ESTOU DE ACORDO COM SUAS CONDIÇÕES</b>.
                
                Se, por qualquer motivo, o Governo Federal e/ou Estadual não conceda subsídio ao prêmio para esta proposta, <b>ME RESPONSABILIZO PELO CUSTO INTEGRAL DO SEGURO</b>.
                
                <b>AUTORIZO</b> o uso de meio eletrônico pela Seguradora para o contato e envio de informações referentes ao seguro, inclusive envio de apólices e boletos.
            ');

            INSERT INTO sistema.configuracao_sistema (ds_nome, ds_valor, id_usuario_criacao)
            SELECT 'DATA_INICIO_NOVA_LEI_SEGURO', '2025-12-10', 2068
            WHERE NOT EXISTS (
                SELECT 1 FROM sistema.configuracao_sistema WHERE ds_nome = 'DATA_INICIO_NOVA_LEI_SEGURO'
            );

            DROP VIEW produto.v_atributos;
            DROP VIEW seguro.v_modelos_laudos_previas_grupos_atributos;

            ALTER TABLE produto.atributos_rn ALTER COLUMN ds_descricao_atributo TYPE VARCHAR(450);

            INSERT INTO produto.atributos_rn (
                    id_atributo_modulo,
                    ds_chave_rn,
                    ds_descricao_atributo,
                    fl_permite_exclusao,
                    id_tipo_atributo,
                    ds_ordem,
                    ds_valores_opcoes,
                    fl_required,
                    ds_validar_campo_valor,
                    fl_atendimento
                )
            VALUES (
                    2,
                    'QUEST_LOCALIZACAO_TALHAO',
                    'Alguma parcela/talhão da área segurada está total ou parcialmente localizada em Unidade de Conservação (Federal/Estadual/Municipal), Áreas de Preservação Ambiental (exceto se houver aprovação oficial constante em plano de manejo), Área de Preservação Permanente, Reserva Legal, Área embargada por órgão ambiental (IBAMA, ICMBio ou órgão estadual/municipal), Terra Indígena, Território Quilombola ou qualquer área restrita, protegida ou embargada?', 
                    false,
                    3,
                    (select max(ds_ordem) + 1 from produto.atributos_rn),
                    '1:Sim|0:Não',
                    true,
                    1,
                    false
                );

            INSERT INTO produto.produtos_atributos_rn
                (id_atributo_rn, id_grupo_atributo_rn, ds_valor)
            SELECT
                (SELECT id FROM produto.atributos_rn WHERE ds_chave_rn = 'QUEST_LOCALIZACAO_TALHAO'),
                produtos_grupos_atributos_rn.id AS id_grupo,
                1 AS valor
            from produto.produtos
            inner join produto.produtos_grupos_atributos_rn
                on produtos_grupos_atributos_rn.id_produto = produtos.id
            where
                produtos.id_safra = 29
                AND produtos_grupos_atributos_rn.ds_tipo = 'q';

            CREATE VIEW produto.v_atributos AS
                SELECT a.id_usuario_criacao,
                    a.id_usuario_alteracao,
                    a.dt_criacao,
                    a.fl_required,
                    a.dt_alteracao,
                    a.fl_ativo,
                    a.fl_del,
                    a.id,
                    a.id_atributo_modulo,
                    a.ds_chave_rn,
                    a.ds_descricao_atributo,
                    a.fl_permite_exclusao,
                    a.id_tipo_atributo,
                    a.ds_valores_opcoes,
                    a.ds_ordem,
                    a.id_parent,
                    a.ds_parent_value,
                    a.ds_schema,
                    a.ds_table,
                    a.ds_option_value,
                    a.ds_option_text,
                    a.ds_option_filter,
                    a.ds_validar_campo,
                    a.ds_validar_campo_valor,
                    m.ds_chave_atributo_modulo,
                    m.ds_descricao_atributo_modulo,
                    t.ds_chave_tipo_atributo,
                    t.ds_descricao_tipo_atributo
                FROM produto.atributos_rn a
                    JOIN produto.atributos_modulos m ON a.id_atributo_modulo = m.id
                    JOIN produto.tipo_atributo t ON a.id_tipo_atributo = t.id
                WHERE m.fl_ativo = true AND t.fl_ativo = true;

            CREATE VIEW seguro.v_modelos_laudos_previas_grupos_atributos AS
                SELECT m.ds_titulo,
                    ar1.ds_descricao_atributo,
                    mg.ds_nome_grupo,
                    mga.id_modelos_laudos_previas_grupos,
                    mga.ds_ordem,
                    mga.fl_pertence_folha,
                    mga.id_atributo_rn_proposta,
                    mga.id_atributo_rn,
                    mga.id,
                    ar2.ds_descricao_atributo AS ds_descricao_atributo_proposta
                FROM seguro.modelos_laudos_previas m,
                    seguro.modelos_laudos_previas_grupos mg,
                    seguro.modelos_laudos_previas_grupos_atributos mga
                    LEFT JOIN produto.atributos_rn ar2 ON mga.id_atributo_rn_proposta = ar2.id,
                    produto.atributos_rn ar1
                WHERE mg.id_modelos_laudos_previas = m.id AND mga.id_modelos_laudos_previas_grupos = mg.id AND mga.id_atributo_rn = ar1.id;
SQL
        );
    }

    public function down(): void
    {
        $this->execute(<<<SQL
            DROP VIEW produto.v_atributos;
            DROP VIEW seguro.v_modelos_laudos_previas_grupos_atributos;

            DELETE FROM sistema.configuracao_sistema WHERE ds_nome = 'DECLARACAO_PROPONENTE_CONFORMIDADE_CONTRATUAL_NOVA_LEI';

            DELETE FROM produto.produtos_atributos_rn WHERE id_atributo_rn = (SELECT id FROM produto.atributos_rn WHERE ds_chave_rn = 'QUEST_LOCALIZACAO_TALHAO');
            DELETE FROM produto.atributos_rn WHERE ds_chave_rn = 'QUEST_LOCALIZACAO_TALHAO';
            
            ALTER TABLE produto.atributos_rn ALTER COLUMN ds_descricao_atributo TYPE VARCHAR(350);

            CREATE VIEW produto.v_atributos AS
                SELECT a.id_usuario_criacao,
                    a.id_usuario_alteracao,
                    a.dt_criacao,
                    a.fl_required,
                    a.dt_alteracao,
                    a.fl_ativo,
                    a.fl_del,
                    a.id,
                    a.id_atributo_modulo,
                    a.ds_chave_rn,
                    a.ds_descricao_atributo,
                    a.fl_permite_exclusao,
                    a.id_tipo_atributo,
                    a.ds_valores_opcoes,
                    a.ds_ordem,
                    a.id_parent,
                    a.ds_parent_value,
                    a.ds_schema,
                    a.ds_table,
                    a.ds_option_value,
                    a.ds_option_text,
                    a.ds_option_filter,
                    a.ds_validar_campo,
                    a.ds_validar_campo_valor,
                    m.ds_chave_atributo_modulo,
                    m.ds_descricao_atributo_modulo,
                    t.ds_chave_tipo_atributo,
                    t.ds_descricao_tipo_atributo
                FROM produto.atributos_rn a
                    JOIN produto.atributos_modulos m ON a.id_atributo_modulo = m.id
                    JOIN produto.tipo_atributo t ON a.id_tipo_atributo = t.id
                WHERE m.fl_ativo = true AND t.fl_ativo = true;

            CREATE VIEW seguro.v_modelos_laudos_previas_grupos_atributos AS
                SELECT m.ds_titulo,
                    ar1.ds_descricao_atributo,
                    mg.ds_nome_grupo,
                    mga.id_modelos_laudos_previas_grupos,
                    mga.ds_ordem,
                    mga.fl_pertence_folha,
                    mga.id_atributo_rn_proposta,
                    mga.id_atributo_rn,
                    mga.id,
                    ar2.ds_descricao_atributo AS ds_descricao_atributo_proposta
                FROM seguro.modelos_laudos_previas m,
                    seguro.modelos_laudos_previas_grupos mg,
                    seguro.modelos_laudos_previas_grupos_atributos mga
                    LEFT JOIN produto.atributos_rn ar2 ON mga.id_atributo_rn_proposta = ar2.id,
                    produto.atributos_rn ar1
                WHERE mg.id_modelos_laudos_previas = m.id AND mga.id_modelos_laudos_previas_grupos = mg.id AND mga.id_atributo_rn = ar1.id;
SQL
        );
    }
}
