<?php

declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class TaskInc70124 extends AbstractMigration
{

    public function up(): void
    {
        $this->execute(<<<SQL
            CREATE table manutencao.ajuste_envio_termo_estadual_ecm (
                id_proposta INTEGER,
                id_endosso_erp INTEGER,
                id_documento_erp INTEGER,
                ds_chave_tipo_envio VARCHAR(60),
                dt_criacao dt_criacao,
                CONSTRAINT fk_id_proposta FOREIGN KEY (id_proposta)
                    REFERENCES seguro.propostas (id)
            );

            INSERT INTO manutencao.ajuste_envio_termo_estadual_ecm
            SELECT
                id_proposta,
                id_endosso_erp,
                id_documento_erp,
                ds_chave_tipo_envio,
                dt_criacao
            FROM log.envio_formulario_ecm_plug_essor
            WHERE
                dt_criacao > '2026-07-20 00:00:00'
                AND fl_sucesso_envio IS TRUE
                AND ds_chave_tipo_envio IN ('PROPOSTA', 'COTACAO')
                AND id_proposta IN (
                    SELECT
                        propostas.id
                    FROM seguro.propostas
                    INNER JOIN seguro.propostas_questionario
                        ON propostas_questionario.id_proposta = propostas.id
                    INNER JOIN produto.atributos_rn
                        ON atributos_rn.id = propostas_questionario.id_atributo_rn
                    INNER JOIN seguro.propostas_propriedades
                        ON propostas_propriedades.id_proposta = propostas.id
                    INNER JOIN sistema.municipios
                        ON municipios.id = propostas_propriedades.id_municipio
                    INNER JOIN sistema.estados
                        ON estados.id = municipios.id_estado
                    WHERE
                        estados.ds_sigla = 'SP'
                        AND propostas.id = propostas.id_proposta_mae
                        AND dt_transmissao > '2026-07-20 00:00:00'
                        AND atributos_rn.ds_chave_rn = 'QUEST_SUBVENCAO_ESTADUAL'
                        AND propostas_questionario.ds_resposta = '1'
                );
        
            -- Update a fim de reenviar arquivos de propostas mãe com termo de SP
            UPDATE log.envio_formulario_ecm_plug_essor SET fl_sucesso_envio = FALSE
            WHERE
                dt_criacao > '2026-07-20 00:00:00'
                AND fl_sucesso_envio IS TRUE
                AND ds_chave_tipo_envio IN ('PROPOSTA', 'COTACAO')
                AND id_proposta IN (
                    SELECT
                        propostas.id
                    FROM seguro.propostas
                    INNER JOIN seguro.propostas_questionario
                        ON propostas_questionario.id_proposta = propostas.id
                    INNER JOIN produto.atributos_rn
                        ON atributos_rn.id = propostas_questionario.id_atributo_rn
                    INNER JOIN seguro.propostas_propriedades
                        ON propostas_propriedades.id_proposta = propostas.id
                    INNER JOIN sistema.municipios
                        ON municipios.id = propostas_propriedades.id_municipio
                    INNER JOIN sistema.estados
                        ON estados.id = municipios.id_estado
                    WHERE
                        estados.ds_sigla = 'SP'
                        AND propostas.id = propostas.id_proposta_mae
                        AND dt_transmissao > '2026-07-20 00:00:00'
                        AND atributos_rn.ds_chave_rn = 'QUEST_SUBVENCAO_ESTADUAL'
                        AND propostas_questionario.ds_resposta = '1'
                );

                INSERT INTO manutencao.ajuste_envio_termo_estadual_ecm
                SELECT
                    id_proposta,
                    id_endosso_erp,
                    id_documento_erp,
                    ds_chave_tipo_envio,
                    dt_criacao
                FROM log.envio_formulario_ecm_plug_essor
                WHERE
                    dt_criacao > '2026-07-20 00:00:00'
                    AND fl_sucesso_envio IS TRUE
                    AND ds_chave_tipo_envio IN ('PROPOSTA')
                    AND id_proposta IN (
                        SELECT
                            propostas.id
                        FROM seguro.propostas
                        INNER JOIN seguro.propostas_questionario
                            ON propostas_questionario.id_proposta = propostas.id
                        INNER JOIN seguro.propostas_endosso
                            ON propostas_endosso.id_proposta = propostas.id
                        INNER JOIN produto.atributos_rn
                            ON atributos_rn.id = propostas_questionario.id_atributo_rn
                        INNER JOIN seguro.propostas_propriedades
                            ON propostas_propriedades.id_proposta = propostas.id
                        INNER JOIN sistema.municipios
                            ON municipios.id = propostas_propriedades.id_municipio
                        INNER JOIN sistema.estados
                            ON estados.id = municipios.id_estado
                        WHERE
                            estados.ds_sigla = 'SP'
                            AND propostas.id <> propostas.id_proposta_mae
                            AND dt_transmissao > '2026-07-20 00:00:00'
                            AND atributos_rn.ds_chave_rn = 'QUEST_SUBVENCAO_ESTADUAL'
                            AND propostas_questionario.ds_resposta = '1'
                            AND propostas_endosso.fl_proposta_vigente IS TRUE
                            AND NOT EXISTS (
                                SELECT
                                    1
                                FROM seguro.propostas_endosso spe
                                INNER JOIN seguro.propostas_questionario spq
                                    ON spq.id_proposta = spe.id_proposta
                                INNER JOIN produto.atributos_rn par
                                    ON par.id = spq.id_atributo_rn
                                WHERE
                                    spe.id_endosso = propostas_endosso.id_endosso
                                    AND spe.id_proposta < propostas_endosso.id_proposta
                                    AND spe.fl_proposta_vigente IS FALSE
                                    AND par.ds_chave_rn = 'QUEST_SUBVENCAO_ESTADUAL'
                                    AND spq.ds_resposta = '1'
                            )
                    );

                -- Update a fim de reenviar arquivos de endossos com subvenção estadual marcada, cujas propostas mãe não tinham subvencção estadual
                UPDATE log.envio_formulario_ecm_plug_essor SET fl_sucesso_envio = FALSE
                WHERE
                    dt_criacao > '2026-07-20 00:00:00'
                    AND fl_sucesso_envio IS TRUE
                    AND ds_chave_tipo_envio IN ('PROPOSTA')
                    AND id_proposta IN (
                        SELECT
                            propostas.id
                        FROM seguro.propostas
                        INNER JOIN seguro.propostas_questionario
                            ON propostas_questionario.id_proposta = propostas.id
                        INNER JOIN seguro.propostas_endosso
                            ON propostas_endosso.id_proposta = propostas.id
                        INNER JOIN produto.atributos_rn
                            ON atributos_rn.id = propostas_questionario.id_atributo_rn
                        INNER JOIN seguro.propostas_propriedades
                            ON propostas_propriedades.id_proposta = propostas.id
                        INNER JOIN sistema.municipios
                            ON municipios.id = propostas_propriedades.id_municipio
                        INNER JOIN sistema.estados
                            ON estados.id = municipios.id_estado
                        WHERE
                            estados.ds_sigla = 'SP'
                            AND propostas.id <> propostas.id_proposta_mae
                            AND dt_transmissao > '2026-07-20 00:00:00'
                            AND atributos_rn.ds_chave_rn = 'QUEST_SUBVENCAO_ESTADUAL'
                            AND propostas_questionario.ds_resposta = '1'
                            AND propostas_endosso.fl_proposta_vigente IS TRUE
                            AND NOT EXISTS (
                                SELECT
                                    1
                                FROM seguro.propostas_endosso spe
                                INNER JOIN seguro.propostas_questionario spq
                                    ON spq.id_proposta = spe.id_proposta
                                INNER JOIN produto.atributos_rn par
                                    ON par.id = spq.id_atributo_rn
                                WHERE
                                    spe.id_endosso = propostas_endosso.id_endosso
                                    AND spe.id_proposta < propostas_endosso.id_proposta
                                    AND spe.fl_proposta_vigente IS FALSE
                                    AND par.ds_chave_rn = 'QUEST_SUBVENCAO_ESTADUAL'
                                    AND spq.ds_resposta = '1'
                            )
                    );
SQL
        );
    }

    public function down(): void
    {
        $this->execute(<<<SQL
            UPDATE log.envio_formulario_ecm_plug_essor SET fl_sucesso_envio = TRUE
            FROM manutencao.ajuste_envio_termo_estadual_ecm
            WHERE
                ajuste_envio_termo_estadual_ecm.id_proposta = envio_formulario_ecm_plug_essor.id_proposta
                AND ajuste_envio_termo_estadual_ecm.id_endosso_erp = envio_formulario_ecm_plug_essor.id_endosso_erp
                AND ajuste_envio_termo_estadual_ecm.id_documento_erp = envio_formulario_ecm_plug_essor.id_documento_erp;

            DROP TABLE manutencao.ajuste_envio_termo_estadual_ecm;
SQL
        );
    }
}
