<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class TaskSr52785 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute(<<<SQL
            INSERT INTO sistema.status (ds_status, cd_status, ds_chave, id_tipo_status)
                VALUES ('Em processamento de dados bancários', 12, 'EM_PROCESSAMENTO_DADOS_BANCARIOS', 33);
            
            CREATE TEMP TABLE proposta_devolucoes_status_temp AS
                SELECT id, id_proposta_devolucao
                  FROM seguro.propostas_devolucoes_status
                 WHERE fl_ativo is true
                   AND id_status IN (285, 289);
            
            UPDATE seguro.propostas_devolucoes_status SET fl_ativo = false WHERE id in (SELECT id FROM proposta_devolucoes_status_temp);

            INSERT INTO seguro.propostas_devolucoes_status (id_usuario_criacao, id_proposta_devolucao, id_status, fl_observacao_automatica)
                SELECT
                    2068,
                    id_proposta_devolucao,
                    (SELECT id FROM sistema.status WHERE ds_chave = 'EM_PROCESSAMENTO_DADOS_BANCARIOS' AND id_tipo_status = 33) as id_status,
                    true
                  FROM proposta_devolucoes_status_temp;
            
            UPDATE sistema.status SET fl_ativo = false WHERE ds_chave = 'EM_ANALISE' AND id_tipo_status = 33;
SQL
        );
    }

    public function down(): void
    {
        $this->execute(<<<SQL
            UPDATE sistema.status SET fl_ativo = true WHERE ds_chave = 'EM_ANALISE' AND id_tipo_status = 33;

            CREATE TEMP TABLE proposta_devolucoes_status_rollback AS
                SELECT max(id) AS id
                      ,id_proposta_devolucao
                  FROM seguro.propostas_devolucoes_status
                  WHERE fl_ativo is false
                    AND id_proposta_devolucao IN (SELECT pds.id_proposta_devolucao
                                                    FROM seguro.propostas_devolucoes_status pds
                                                    JOIN sistema.status st ON st.id = pds.id_status
                                                   WHERE st.ds_chave = 'EM_PROCESSAMENTO_DADOS_BANCARIOS'
                                                     AND st.id_tipo_status = 33)
                 GROUP BY id_proposta_devolucao
                 ORDER BY id_proposta_devolucao;
            
            UPDATE seguro.propostas_devolucoes_status SET fl_ativo = true
              FROM proposta_devolucoes_status_rollback
             WHERE propostas_devolucoes_status.id = proposta_devolucoes_status_rollback.id;

            DELETE FROM seguro.propostas_devolucoes_status WHERE id_status = (SELECT id FROM sistema.status WHERE ds_chave = 'EM_PROCESSAMENTO_DADOS_BANCARIOS' AND id_tipo_status = 33);

            DELETE FROM sistema.status WHERE ds_chave = 'EM_PROCESSAMENTO_DADOS_BANCARIOS' AND id_tipo_status = 33;
SQL
        );
    }
}
