<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class Task2306221231 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute("CREATE OR REPLACE FUNCTION manutencao.ajuste_vinculo_vp_endosso_vigente() RETURNS VOID AS $$
        DECLARE
            stSQL       VARCHAR;
            crCursor    REFCURSOR;
            reRecord    RECORD;
        BEGIN
            stSQL := '
                          SELECT propostas.id_proposta_mae
                               , propostas_endosso_vigente.id_proposta_vigente
                               , propostas_endosso.id_endosso
                               , propostas_vistorias_previas.id_proposta as id_proposta_vistoria
                               , propostas_vistorias_previas.id_vistoria
                            FROM seguro.propostas
                       LEFT JOIN seguro.propostas_endosso
                              ON propostas_endosso.id_proposta = propostas.id
                            JOIN (
                                   SELECT propostas_endosso.id_endosso
                                        , propostas_endosso.id_proposta AS id_proposta_vigente
                                     FROM seguro.propostas_endosso
                                    WHERE propostas_endosso.fl_proposta_vigente = TRUE
                                 ) AS propostas_endosso_vigente
                              ON propostas_endosso_vigente.id_endosso = propostas_endosso.id_endosso
                            JOIN seguro.propostas_vistorias_previas
                              ON propostas_vistorias_previas.id_proposta = propostas.id
                           WHERE 1 = 1
                             AND propostas_vistorias_previas.id_status NOT IN (71,226)
                     ';
        OPEN crCursor FOR EXECUTE stSQL;
        LOOP
            FETCH crCursor INTO reRecord;
            EXIT WHEN NOT FOUND;
        
            UPDATE seguro.propostas_vistorias_previas
               SET id_proposta = reRecord.id_proposta_vigente
             WHERE id_proposta = reRecord.id_proposta_vistoria
               AND id_vistoria = reRecord.id_vistoria
                 ;
        END LOOP;
        CLOSE crCursor;
        
        END;
        $$ LANGUAGE 'plpgsql';");
        
        $this->execute("SELECT        manutencao.ajuste_vinculo_vp_endosso_vigente()");
        $this->execute("DROP FUNCTION manutencao.ajuste_vinculo_vp_endosso_vigente()");
    }

    public function down(): void
    {

    }
}
