<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class TaskInc59137 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute("
        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'
        ;
        ");
    }

    public function down(): void
    {
        $this->execute("DROP FUNCTION produto.get_cobertura_i4pro_by_aviso(INTEGER)");
    }
}
