<?php

declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class TaskInc70279 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute('
            UPDATE produto.coberturas SET cd_cobertura_seguradora = 2414 WHERE ds_chave_cobertura = \'COB_GEADA_II\';

            CREATE OR REPLACE FUNCTION produto.get_cobertura_i4pro_by_aviso(in_id_aviso integer)
                RETURNS integer
                LANGUAGE plpgsql
                AS $function$
                        DECLARE
                            cd_cobertura_seguradora INTEGER;
                        BEGIN
        
                            SELECT CASE WHEN extract (YEAR from coalesce(pr_mae.dt_transmissao, now())) >= 2025
                                        THEN COALESCE(ci.cd_cobertura_seguradora_novo,p.cd_cobertura_seguradora)
                                        ELSE ci.cd_cobertura_seguradora_antigo
                                    END AS cd_cobertura_seguradora
                            INTO cd_cobertura_seguradora
                            FROM sinistro.avisos
                            JOIN sinistro.avisos_eventos ON avisos_eventos.id_aviso = avisos.id
                            JOIN seguro.propostas pr ON pr.id = avisos.id_proposta
                            JOIN seguro.propostas pr_mae ON pr_mae.id = pr.id_proposta_mae
                            JOIN produto.produtos_coberturas_eventos pce ON pce.id_produto = pr.id_produto AND pce.id_evento = avisos_eventos.id_evento
                            JOIN seguro.propostas_coberturas pc ON pc.id_proposta = pr.id AND pc.id_cobertura = pce.id_cobertura
                            JOIN produto.coberturas p ON p.id = pc.id_cobertura
                            LEFT JOIN produto.coberturas_i4pro ci ON ci.cd_cobertura_seguradora_antigo = p.cd_cobertura_seguradora
                            WHERE avisos.id = in_id_aviso
                        ;
        
                        RETURN cd_cobertura_seguradora;
                    END;
                    $function$
            ');
    }

    public function down(): void
    {
        $this->execute(<<<SQL
            UPDATE produto.coberturas SET cd_cobertura_seguradora = NULL WHERE ds_chave_cobertura = 'COB_GEADA_II';

            CREATE OR REPLACE FUNCTION produto.get_cobertura_i4pro_by_aviso(in_id_aviso INTEGER) RETURNS INTEGER AS $$
            DECLARE
                cd_cobertura_seguradora INTEGER;
            BEGIN

                SELECT CASE WHEN extract (YEAR from coalesce(pr_mae.dt_transmissao, now())) >= 2025
                            THEN ci.cd_cobertura_seguradora_novo
                            ELSE ci.cd_cobertura_seguradora_antigo
                        END AS cd_cobertura_seguradora
                    INTO cd_cobertura_seguradora
                    FROM sinistro.avisos
                    JOIN sinistro.avisos_eventos ON avisos_eventos.id_aviso = avisos.id
                    JOIN seguro.propostas pr ON pr.id = avisos.id_proposta
                    JOIN seguro.propostas pr_mae ON pr_mae.id = pr.id_proposta_mae
                    JOIN produto.produtos_coberturas_eventos pce ON pce.id_produto = pr.id_produto AND pce.id_evento = avisos_eventos.id_evento
                    JOIN seguro.propostas_coberturas pc ON pc.id_proposta = pr.id AND pc.id_cobertura = pce.id_cobertura
                    JOIN produto.coberturas p ON p.id = pc.id_cobertura
                    JOIN produto.coberturas_i4pro ci ON ci.cd_cobertura_seguradora_antigo = p.cd_cobertura_seguradora
                    WHERE avisos.id = in_id_aviso
                ;

                RETURN cd_cobertura_seguradora;
            END;
            $$ LANGUAGE 'plpgsql'
SQL
        );
    }
}
