<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class TaskInc57419 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute("
        CREATE OR REPLACE FUNCTION produto.get_evento_i4pro_by_aviso(in_id_aviso INTEGER) RETURNS INTEGER AS $$
        DECLARE
            cd_evento_seguradora INTEGER;
        BEGIN

            SELECT CASE WHEN extract (YEAR from coalesce(pr_mae.dt_transmissao, now())) >= 2025
                        THEN ei.cd_evento_seguradora_novo
                        ELSE ei.cd_evento_seguradora_antigo
                   END INTO cd_evento_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 produto.coberturas_eventos pe ON pe.id_cobertura = pce.id_cobertura AND pe.id_evento = pce.id_evento
              JOIN produto.eventos_i4pro ei ON ei.cd_evento_seguradora_antigo = pe.cd_evento_seguradora
             WHERE avisos.id = in_id_aviso
            ;

            RETURN cd_evento_seguradora;
        END;
        $$ LANGUAGE 'plpgsql'
        ;
        ");
    }

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