<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class TaskSr54857 extends AbstractMigration
{
    private function getIdHistorico()
    {
        $queryParent = $this->query("SELECT id FROM sistema.acao WHERE ds_module = 'sinistro2' AND ds_controller = 'avisofinalreplantio' AND ds_action = 'historicodestinatariopagamento'");
        $rows = $queryParent->fetchAll();

        return $rows[0]['id'];
    }  
    private function getIdBeneficiarios()
    {
        $queryParent = $this->query("SELECT id FROM sistema.acao WHERE ds_module = 'sinistro2' AND ds_controller = 'avisofinalreplantio' AND ds_action = 'beneficiarios'");
        $rows = $queryParent->fetchAll();

        return $rows[0]['id'];
    }

    private function getIdConfirma()
    {
        $queryParent = $this->query("SELECT id FROM sistema.acao WHERE ds_module = 'sinistro2' AND ds_controller = 'avisofinalreplantio' AND ds_action = 'confirma'");
        $rows = $queryParent->fetchAll();

        return $rows[0]['id'];
    }

    public function up(): void
    {
      $this->execute(<<<SQL
        ALTER TABLE sinistro.avisos_final_replantio
        ADD COLUMN ds_beneficiario_alteracao VARCHAR(255),
        ADD COLUMN ds_beneficiario_original VARCHAR(255);
      SQL);

      $this->execute(<<<SQL
        insert into sistema.acao (fl_ativo, fl_del, ds_label, ds_module, ds_controller, ds_action, ds_param, id_parent, nr_ordem, ds_descricao, fl_somente_responsavel) values ('t','f','modal de beneficiarios', 'sinistro2', 'avisofinalreplantio','beneficiarios','',1935, 1373, 'Modal para seleção de beneficiário a receber pagamento de cobertura adicional', 'f');
      SQL);

      $this->execute(<<<SQL
          insert into sistema.acao (fl_ativo, fl_del, ds_label, ds_module, ds_controller, ds_action, ds_param, id_parent, nr_ordem, ds_descricao, fl_somente_responsavel) values ('t','f','modal de confirmação', 'sinistro2', 'avisofinalreplantio','confirma','',1935, 1373, 'Modal de confirmação de caminho', 'f');
      SQL);

      $this->execute(<<<SQL
        ALTER TABLE sistema.tipo_arquivo_processo
        ALTER COLUMN ds_tipo_arquivo TYPE VARCHAR(100),
        ALTER COLUMN ds_chave_tipo_arquivo TYPE VARCHAR(100);
      SQL);

      $this->execute(<<<SQL
        insert into sistema.tipo_arquivo_processo (fl_ativo, fl_del, ds_tipo_arquivo, ds_chave_tipo_arquivo) values ('t', 'f', 'TERMO DE CRÉDITO EM CONTA BANCÁRIA', 'TERMO_DE_CRÉDITO_EM_CONTA_BANCÁRIA');
      SQL);
      $idAcaoBeneficiarios = $this->getIdBeneficiarios();
      $this->execute(<<<SQL
        insert into sistema.roles_acao (fl_ativo, fl_del, id_role, id_acao) values ('t', 'f', 6, $idAcaoBeneficiarios);
      SQL);
      $this->execute(<<<SQL
        insert into sistema.roles_acao (fl_ativo, fl_del, id_role, id_acao) values ('t', 'f', 16, $idAcaoBeneficiarios);
      SQL);
      $idConfirma = $this->getIdConfirma();
      $this->execute(<<<SQL
        insert into sistema.roles_acao (fl_ativo, fl_del, id_role, id_acao) values ('t', 'f', 6, $idConfirma);
      SQL);
      $this->execute(<<<SQL
        insert into sistema.roles_acao (fl_ativo, fl_del, id_role, id_acao) values ('t', 'f', 16, $idConfirma);
      SQL);
      
      $this->execute(<<<SQL
        create sequence log.log_alteracao_destinatario_pagamento_id_seq START WITH 1 INCREMENT BY 1;
      SQL);

      $this->execute(<<<SQL
      create table log.log_alteracao_destinatario_pagamento (
        id INT DEFAULT nextval('log.log_alteracao_destinatario_pagamento_id_seq'::regclass),
        id_aviso int NOT NULL,
        id_destinatario_antigo VARCHAR(50),
        id_destinatario_novo VARCHAR(50),
        id_usuario_criacao int,
        id_usuario_alteracao int,
        dt_criacao dt_criacao,
        dt_alteracao dt_alteracao);
      SQL);

      $this->execute(<<<SQL
        insert into sistema.acao (ds_label,ds_module,ds_controller,ds_action,id_parent) values ('historico', 'sinistro2', 'avisofinalreplantio', 'historicodestinatariopagamento', 1935);
      SQL);
      $idHistorico = $this->getIdHistorico();
      $this->execute(<<<SQL
        insert into sistema.roles_acao (fl_ativo, fl_del, id_role, id_acao) values ('t', 'f', 16, $idHistorico);
      SQL);
    }

    public function down(): void
    {
      $this->execute(<<<SQL
        ALTER TABLE sinistro.avisos_final_replantio
        DROP COLUMN ds_beneficiario_alteracao,
        DROP COLUMN ds_beneficiario_original;
      SQL);

      $this->execute(<<<SQL
        delete from sistema.acao where ds_module = 'sinistro2' and ds_controller = 'avisofinalreplantio' and ds_action = 'beneficiarios';
      SQL);

      $this->execute(<<<SQL
        DELETE FROM sistema.acao WHERE ds_module = 'sinistro2' and ds_controller = 'avisofinalreplantio' and ds_action = 'confirma';
      SQL);

      $this->execute(<<<SQL
        DELETE FROM sistema.tipo_arquivos_processo WHERE ds_tipo_arquivo = 'TERMO DE CRÉDITO EM CONTA BANCÁRIA' AND ds_chave_tipo_arquivo = 'TERMO_DE_CRÉDITO_EM_CONTA_BANCÁRIA';
      SQL);

      $this->execute(<<<SQL
        DROP TABLE log.log_alteracao_destinatario_pagamento;
      SQL);

      $this->execute(<<<SQL
        drop SEQUENCE log.log_alteracao_destinatario_pagamento_id_seq;
      SQL);
    }
}
