<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class Task2308251626 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute("
                         CREATE TABLE manutencao.laudos_em_branco_2308251626 AS
                         SELECT propostas_vistorias_previas_arquivos.*
                           FROM seguro.propostas_vistorias_previas
                           JOIN seguro.propostas_vistorias_previas_arquivos
                             ON propostas_vistorias_previas_arquivos.id_proposta_vistoria = propostas_vistorias_previas.id
                          WHERE propostas_vistorias_previas_arquivos.id_tipo_arquivo_laudo_previa = 2
                            AND propostas_vistorias_previas_arquivos.dt_criacao < propostas_vistorias_previas.dt_transmitido_tablet
                            AND EXTRACT(hour from propostas_vistorias_previas_arquivos.dt_criacao) < '4'
                            AND propostas_vistorias_previas_arquivos.dt_criacao > '2023-01-01'
                       ORDER BY propostas_vistorias_previas_arquivos.dt_criacao
                              , propostas_vistorias_previas.id_proposta
                       ");
        $this->execute("
                         CREATE OR REPLACE FUNCTION manutencao.limpa_laudos_em_branco() RETURNS VOID AS $$
                         DECLARE
                             stSQL       VARCHAR;
                             crCursor    REFCURSOR;
                             reRecord    RECORD;
                         BEGIN
                             stSQL := '   SELECT propostas_vistorias_previas_arquivos.*
                                            FROM seguro.propostas_vistorias_previas
                                            JOIN seguro.propostas_vistorias_previas_arquivos
                                              ON propostas_vistorias_previas_arquivos.id_proposta_vistoria = propostas_vistorias_previas.id
                                           WHERE propostas_vistorias_previas_arquivos.id_tipo_arquivo_laudo_previa = 2
                                             AND propostas_vistorias_previas_arquivos.dt_criacao < propostas_vistorias_previas.dt_transmitido_tablet
                                             AND EXTRACT(hour from propostas_vistorias_previas_arquivos.dt_criacao) < ''4''
                                             AND propostas_vistorias_previas_arquivos.dt_criacao > ''2023-01-01''
                                        ORDER BY propostas_vistorias_previas_arquivos.dt_criacao
                                               , propostas_vistorias_previas.id_proposta
                                      ';
                             OPEN crCursor FOR EXECUTE stSQL;
                             LOOP
                                 FETCH crCursor INTO reRecord;
                                 EXIT WHEN NOT FOUND;
                         
                                 DELETE
                                   FROM seguro.propostas_vistorias_previas_arquivos
                                  WHERE dt_criacao                   = reRecord.dt_criacao
                                    AND id_proposta_vistoria         = reRecord.id_proposta_vistoria
                                    AND id_tipo_arquivo_laudo_previa = 2
                                      ;
                             END LOOP;
                             CLOSE crCursor;
                         END;
                         $$ LANGUAGE 'plpgsql';
                       ");
      $this->execute("SELECT manutencao.limpa_laudos_em_branco()");

    }

    public function down(): void
    {
        $this->execute("INSERT INTO seguro.propostas_vistorias_previas_arquivos SELECT * FROM manutencao.laudos_em_branco_2308251626");
    }
}
