<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class TaskInc52648 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute(<<<SQL
            UPDATE sinistro.liquidacoes SET dt_base_pagamento = '2025-01-20' WHERE id = 135661;

            CREATE OR REPLACE FUNCTION sinistro.liq_ultimo_aviso_final_replantio(vid_liquidacao integer)
            RETURNS date
            LANGUAGE plpgsql
            AS \$function\$
            DECLARE
                    dt_ultimo_aviso_final_replantio date;
            BEGIN
                select
                    max(tmp_replantio.dt_criacao)
                from
                    sinistro.processos sp
                    inner join seguro.propostas_endosso spr on spr.id_proposta = sp.id_proposta
                    inner join sinistro.liquidacoes l on l.id_processo = sp.id
                    inner join sinistro.liquidacoes_itens_segurados_coberturas lisc on lisc.id_liquidacao = l.id
                    inner join seguro.itens_segurados isg1 on isg1.id = lisc.id_item_segurado
                    inner join
                        (
                            select
                                ae.id_proposta,
                                ae.id,
                                ae.dt_final_replantio,
                                ae.dt_criacao,
                                isg2.nr_item_segurado,
                                pre.id_endosso
                            from
                                seguro.propostas pr
                                inner join seguro.propostas_endosso pre on pre.id_proposta = pr.id
                                inner join sinistro.avisos_final_replantio ae on ae.id_proposta = pr.id
                                inner join sinistro.avisos_final_replantio_itens_segurados aeis on aeis.id_aviso_final_replantio = ae.id
                                inner join seguro.itens_segurados isg2 on isg2.id = aeis.id_item_segurado
                        ) as tmp_replantio 
                        on tmp_replantio.id_endosso = spr.id_endosso and tmp_replantio.nr_item_segurado = isg1.nr_item_segurado
                    into
                        dt_ultimo_aviso_final_replantio
                where
                    l.dt_criacao >= tmp_replantio.dt_criacao
                    and l.id = vid_liquidacao;

                return dt_ultimo_aviso_final_replantio;   
            END;
            \$function\$;
SQL        
        );
    }

    public function down(): void
    {
        $this->execute(<<<SQL
            UPDATE sinistro.liquidacoes SET dt_base_pagamento = '2024-12-06' WHERE id = 135661;

            CREATE OR REPLACE FUNCTION sinistro.liq_ultimo_aviso_final_replantio(vid_liquidacao integer)
            RETURNS date
            LANGUAGE plpgsql
            AS \$function\$
            DECLARE
                    dt_ultimo_aviso_final_replantio date;
            BEGIN
                select
                    max(tmp_replantio.dt_criacao)
                from
                    sinistro.processos sp,
                    sinistro.liquidacoes l,
                    sinistro.liquidacoes_itens_segurados_coberturas lisc
                    inner join seguro.itens_segurados isg1 on isg1.id = lisc.id_item_segurado,
                    (
                        select
                        ae.id_proposta,
                        ae.id,
                        ae.dt_final_replantio,
                        ae.dt_criacao,
                        isg2.nr_item_segurado
                        from
                            seguro.propostas pr
                            inner join seguro.propostas_endosso pre on pre.id_proposta = pr.id and pre.fl_proposta_vigente = true
                            inner join sinistro.avisos_final_replantio ae on ae.id_proposta = pr.id
                            inner join sinistro.avisos_final_replantio_itens_segurados aeis on aeis.id_aviso_final_replantio = ae.id
                            inner join seguro.itens_segurados isg2 on isg2.id = aeis.id_item_segurado
                    ) as tmp_replantio
                into
                    dt_ultimo_aviso_final_replantio
                where
                    sp.id = l.id_processo and
                    lisc.id_liquidacao = l.id and
                    l.dt_criacao >= tmp_replantio.dt_criacao and
                    tmp_replantio.id_proposta = sp.id_proposta and
                    tmp_replantio.nr_item_segurado = isg1.nr_item_segurado and
                    l.id = vid_liquidacao;
                        
                return dt_ultimo_aviso_final_replantio;
                        
            END;
            \$function\$;
SQL       
        );
    }
}