<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class TaskINC52013 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute(<<<SQL
CREATE MATERIALIZED VIEW sumario.laudos_nao_sinistrados AS (
select lf.id as id_laudo_final
     , lf.dt_vistoria
     , lf.dt_criacao
     , co.ds_nome_cobertura
     , pp.id_safra
     , sp.id as id_processo
from sinistro.processos sp
         inner join sinistro.laudos_finais lf on lf.id_processo = sp.id
         inner join produto.coberturas co on co.id = lf.id_cobertura
         inner join seguro.propostas sprop on sprop.id = sp.id_proposta
         inner join produto.produtos pp on pp.id = sprop.id_produto
where (lf.fl_evento_nao_constatado = true OR lf.fl_dt_evento_em_cobertura IS FALSE)
  and (pp.id_safra IN (SELECT safras.id
                       FROM produto.safras
                                JOIN (SELECT safras_1.id
                                      FROM produto.safras safras_1
                                      WHERE safras_1.fl_vigente = true) vigente ON vigente.id >= safras.id
                       WHERE safras.id = vigente.id
                          OR safras.id = (vigente.id - 1)))
);

INSERT INTO manutencao.materialized_views (dt_criacao, migration_name, ordem, schemaname, matviewname)
                                   VALUES ('2025-01-15', 'TaskINC52013', 24, 'sumario', 'laudos_nao_sinistrados');
SQL
        );
    }

    public function down(): void
    {
        $this->execute(<<<SQL
DELETE FROM manutencao.materialized_views WHERE schemaname = 'sumario' AND matviewname = 'laudos_nao_sinistrados';
DROP MATERIALIZED VIEW sumario.laudos_nao_sinistrados;
SQL
        );
    }
}
