<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class TaskSr54688 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute(<<<SQL
CREATE OR REPLACE FUNCTION seguro.id_proposta_mae_completo(vid_proposta integer)
 RETURNS character varying
 LANGUAGE plpgsql
AS \$function\$
DECLARE
 	id_proposta_mae_completo varchar(20);
BEGIN
    SELECT CASE WHEN x.id_proposta > 999999 AND coalesce(x.dt_transmissao, x.dt_criacao) >= x.dt_configuracao
                THEN substring(x.proposta_mae_completo FROM 1 FOR 18)
                ELSE x.proposta_mae_completo
            END AS proposta_mae_completo
      FROM (
            SELECT pr.dt_criacao
                  ,pr.dt_transmissao
                  ,pr.id AS id_proposta
                  ,TO_TIMESTAMP('2025-04-07 17:10:00', 'YYYY-MM-DD HH24:MI:SS')::TIMESTAMP WITHOUT TIME ZONE AS dt_configuracao
                  ,pg.id_ramo||'.'||pd.id_seguradora||'.'||pd.id||'.'||pr.id||'-'||pr.nr_digito_verificador AS proposta_mae_completo
              FROM seguro.propostas pr,
                   produto.produtos pd,
                   produto.produtos_geral pg
             WHERE
                pd.id = pr.id_produto
                AND pg.id = pd.id_produto_geral
                AND pr.id IN (SELECT min(id_proposta) FROM seguro.propostas_endosso WHERE id_endosso=(SELECT id_endosso FROM seguro.propostas WHERE id=vid_proposta))
      ) AS x
      INTO id_proposta_mae_completo;
    
    return id_proposta_mae_completo;

END;
\$function\$
SQL
        );
    }

    public function down(): void
    {
        $this->execute(<<<SQL
CREATE OR REPLACE FUNCTION seguro.id_proposta_mae_completo(vid_proposta integer)
 RETURNS character varying
 LANGUAGE plpgsql
AS \$function\$
DECLARE
 	id_proposta_mae_completo varchar(20);
BEGIN

	select
	    pg.id_ramo||'.'||pd.id_seguradora||'.'||pd.id||'.'||pr.id||'-'||pr.nr_digito_verificador
	from
	    seguro.propostas pr,
	    produto.produtos pd,
	    produto.produtos_geral pg
	into
	    id_proposta_mae_completo
	where
		pd.id = pr.id_produto
	    and pg.id = pd.id_produto_geral
	    and pr.id in (select min(id_proposta) from seguro.propostas_endosso where id_endosso=(select id_endosso from seguro.propostas where id=vid_proposta));

        return id_proposta_mae_completo;

END;
\$function\$

SQL
        );
    }
}
