<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class TaskSr59821 extends AbstractMigration
{
    public function up(): void
    {
        $this->upNovasTabelas();
    }

    private function getIdLoadCronometro()
    {
        $queryParent = $this->query("SELECT id FROM sistema.acao WHERE ds_module = 'sinistro2' AND ds_controller = 'cronometroregulacao' AND ds_action = 'load'");
        $rows = $queryParent->fetchAll();

        return $rows[0]['id'];
    }

    private function upNovasTabelas()
    {
        $this->execute(<<<SQL
            create sequence sinistro.cronometro_regulacao_id_seq START WITH 1 INCREMENT BY 1;
        SQL);
        $this->execute(<<<SQL
            CREATE TABLE sinistro.cronometro_regulacao (
            id int DEFAULT nextval('sinistro.cronometro_regulacao_id_seq'::regclass),
            id_proposta int NOT NULL,
            id_aviso_encerramento INT,
            dt_inicio date,
            dt_fim date,
            nr_dias_suspenso INT DEFAULT 0,
            id_status int,
            nr_dias_regulado int,
            dt_suspenso date,
            nr_dias_ativo int,
            CONSTRAINT pk_cronometro_regulacao PRIMARY KEY (id),
            CONSTRAINT fk_id_proposta FOREIGN KEY (id_proposta) REFERENCES seguro.propostas(id),
            CONSTRAINT fk_id_aviso_encerramento FOREIGN KEY (id_aviso_encerramento) REFERENCES sinistro.avisos_encerramento(id),
            CONSTRAINT fk_id_status FOREIGN KEY (id_status) REFERENCES sistema.status(id))
            INHERITS (public.campos_default);
        SQL);
        $this->execute(<<<SQL
            create sequence log.cronometro_regulacao_historico_id_seq START WITH 1 INCREMENT BY 1;
        SQL);
        $this->execute(<<<SQL
            CREATE TABLE log.cronometro_regulacao_historico (
            id INT DEFAULT nextval('log.cronometro_regulacao_historico_id_seq'::regclass),
            id_cronometro int NOT NULL REFERENCES sinistro.cronometro_regulacao(id),
            id_status_antigo int,
            id_status_atual int,
            data_hora TIMESTAMP,
            ds_observacao TEXT) INHERITS (public.campos_default);
        SQL);

        $this->execute(<<<SQL
            INSERT INTO sistema.tipo_status (ds_tipo_status, ds_chave) VALUES ('Contador Regulação','CONTADOR_REGULACAO');
        SQL);
        $this->execute(<<<SQL
            INSERT INTO sistema.acao (ds_label,ds_module,ds_controller,ds_action,ds_param,id_parent) VALUES ('Informações Cronometro', 'sinistro2', 'cronometroregulacao', 'load', '', 24);
        SQL);
        $idAcao = $this->getIdLoadCronometro();
        $this->execute(<<<SQL
            INSERT INTO sistema.roles_acao (fl_ativo,fl_del,id_role,id_acao,fl_permitido) values ('t','f',16,$idAcao,'t');
        SQL);
        $this->execute(<<<SQL
            insert into sistema.status (ds_status, cd_status, ds_chave, id_tipo_status) VALUES ('CRONOMETRO DE REGULACAO ATIVADO', '1', 'ATIVO', currval('sistema.tipo_status_id_seq'));
        SQL);
        $this->execute(<<<SQL
            insert into sistema.status (ds_status, cd_status, ds_chave, id_tipo_status) VALUES ('CRONOMETRO DE REGULACAO SUSPENSO', '2', 'SUSPENSO', currval('sistema.tipo_status_id_seq'));
        SQL);
        $this->execute(<<<SQL
            insert into sistema.status (ds_status, cd_status, ds_chave, id_tipo_status) VALUES ('CRONOMETRO DE REGULACAO FINALIZADO', '3', 'FINALIZADO', currval('sistema.tipo_status_id_seq'));
        SQL);
        $this->execute(<<<SQL
            insert into sistema.status (ds_status, cd_status, ds_chave, id_tipo_status) VALUES ('CRONOMETRO DE REGULACAO ZERADO', '4', 'PARADO', currval('sistema.tipo_status_id_seq'));
        SQL);
    
    }

    public function down(): void
    {
        //Remover registros inseridos
        $this->execute(<<<SQL
            DELETE FROM sistema.acao 
            WHERE ds_label = 'Informações Cronometro' 
            AND ds_module = 'sinistro2' 
            AND ds_controller = 'cronometroregulacao' 
            AND ds_action = 'load';
        SQL);
  
        $this->execute(<<<SQL
            DELETE FROM sistema.status 
            WHERE ds_chave IN ('ATIVO', 'SUSPENSO', 'FINALIZADO') AND id_tipo_status = (select id from sistema.tipo_status where ds_chave = 'CONTADOR_REGULACAO');
        SQL);

        $this->execute(<<<SQL
            DROP TABLE IF EXISTS log.cronometro_regulacao_historico CASCADE;
            DROP TABLE IF EXISTS sinistro.cronometro_regulacao CASCADE;
        SQL);

        $this->execute(<<<SQL
            DROP SEQUENCE IF EXISTS log.cronometro_regulacao_historico_id_seq CASCADE;
            DROP SEQUENCE IF EXISTS sinistro.cronometro_regulacao_id_seq CASCADE;
        SQL);
    }

}

