<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class TaskSR49209 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute(<<<SQL
INSERT INTO sistema.acao (ds_label, ds_module, ds_controller, ds_action, ds_param, id_parent, ds_image, ds_descricao, fl_tipo, dt_criacao, id_usuario_criacao, id)
                  VALUES ('Edição Avançada - Apólice Emitida', 'atendimento', 'proposta', 'edicao_avancada_apolice_emitida', '', 63, '', 'Permite acessar a aba Gerenciamento da Proposta, na consulta do atendimento, mesmo quando o status é Apólice Emitida', 'A', '2024-10-08 10:08:10', 3379, nextval('sistema.acao_id_seq'::regclass))
                       , ('Conferir - Endossos Anteriores', 'atendimento', 'proposta', 'conferir_endossos_anteriores', '', 63, '', 'Habilita a ação Conferir, na consulta do atendimento, para endossos anteriores ao clicar na seta de expansão, independente do status.', 'A', '2024-10-16 16:00:00', 3379, nextval('sistema.acao_id_seq'::regclass));
SQL
        );

        $idAcaoGerenciamentoProposta = $this->getIdAcaoGerenciamentoProposta();
        $idAcaoConferirEndossosAnteriores = $this->getIdAcaoConferirEndossosAnteriores();

        $this->execute(<<<SQL
INSERT INTO sistema.usuarios_acao (id_usuario, id_acao)
                           VALUES (1032, $idAcaoGerenciamentoProposta),
                                  (1039, $idAcaoGerenciamentoProposta),
                                  (1032, $idAcaoConferirEndossosAnteriores),
                                  (1033, $idAcaoConferirEndossosAnteriores),
                                  (1039, $idAcaoConferirEndossosAnteriores);
SQL
        );
    }

    public function down(): void
    {
        $idAcaoGerenciamentoProposta = $this->getIdAcaoGerenciamentoProposta();
        $idAcaoConferirEndossosAnteriores = $this->getIdAcaoConferirEndossosAnteriores();

        $this->execute(<<<SQL
DELETE FROM sistema.usuarios_acao WHERE id_acao in($idAcaoGerenciamentoProposta, $idAcaoConferirEndossosAnteriores);
DELETE FROM sistema.acao WHERE id in($idAcaoGerenciamentoProposta, $idAcaoConferirEndossosAnteriores);
SQL
        );
    }

    private function getIdAcaoConferirEndossosAnteriores(): int
    {
        $query = $this->query("SELECT id FROM sistema.acao WHERE ds_module = 'atendimento' AND ds_controller = 'proposta' and ds_action = 'conferir_endossos_anteriores'");
        $rows = $query->fetchAll();

        return (int)$rows[0]['id'];
    }

    private function getIdAcaoGerenciamentoProposta(): int
    {
        $query = $this->query("SELECT id FROM sistema.acao WHERE ds_module = 'atendimento' AND ds_controller = 'proposta' and ds_action = 'edicao_avancada_apolice_emitida'");
        $rows = $query->fetchAll();

        return (int)$rows[0]['id'];
    }
}
