<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class Task2205271244 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute(<<<SQL
CREATE TABLE produto.comissao_adicional_agrobrasil(
  id SERIAL NOT NULL,
  vl_percentual NUMERIC(12, 2) NOT NULL,
  CONSTRAINT pk_comissao_adicional_agrobrasil PRIMARY KEY (id)
) INHERITS (public.campos_default);

INSERT INTO produto.comissao_adicional_agrobrasil (vl_percentual) VALUES (50.00);
SQL
        );

        $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 ('Comissão', 'produto', 'configuracao', 'submenu', '', 53, '', 'Comissão', 'M', '2022-06-06 10:31:20', 3379, nextval('sistema.acao_id_seq'::regclass));
SQL
);

        $queryParentComissao = $this->query("SELECT id FROM sistema.acao WHERE ds_label = 'Comissão' AND ds_module = 'produto' AND ds_controller = 'configuracao' AND ds_action = 'submenu'");
        $rowsComissao = $queryParentComissao->fetchAll();
        $idParentComissao = $rowsComissao[0]['id'];

        $this->execute(<<<SQL
UPDATE sistema.acao SET id_parent = {$idParentComissao} WHERE id = 1992;

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 ('Comissão Adicional AgroBrasil', 'produto', 'comissaoadicionalagrobrasil', 'form', '', {$idParentComissao}, '', 'Comissão Adicional AgroBrasil', 'M', '2022-06-06 10:44:18', 3379, nextval('sistema.acao_id_seq'::regclass));
SQL
        );

        $queryParentComissaoAdicional = $this->query("SELECT id FROM sistema.acao WHERE ds_label = 'Comissão Adicional AgroBrasil' AND ds_module = 'produto' AND ds_controller = 'comissaoadicionalagrobrasil' AND ds_action = 'form'");
        $rowsComissaoAdicional = $queryParentComissaoAdicional->fetchAll();
        $idParentComissaoAdicional = $rowsComissaoAdicional[0]['id'];

        $this->execute(<<<SQL
INSERT INTO sistema.acao (ds_label, ds_module, ds_controller, ds_action, ds_param, id_parent, ds_image, nr_ordem, fl_tipo, dt_criacao, id_usuario_criacao, id) VALUES ('Editar', 'produto', 'comissaoadicionalagrobrasil', 'form', 'id', {$idParentComissaoAdicional}, 'edit.png', '0', 'L', '2022-06-06 10:44:18', 3379, nextval('sistema.acao_id_seq'::regclass));
SQL
        );

        $queryParentComissaoAdicionalEditar = $this->query("SELECT id FROM sistema.acao WHERE id_parent = {$idParentComissaoAdicional}");
        $rowsComissaoAdicionalEditar = $queryParentComissaoAdicionalEditar->fetchAll();
        $idParentComissaoAdicionalEditar = $rowsComissaoAdicionalEditar[0]['id'];

        $this->execute(<<<SQL
INSERT INTO sistema.usuarios_acao (id_usuario, id_acao) VALUES(2881, {$idParentComissao});
INSERT INTO sistema.usuarios_acao (id_usuario, id_acao) VALUES(1032, {$idParentComissao});
INSERT INTO sistema.usuarios_acao (id_usuario, id_acao) VALUES(1033, {$idParentComissao});
INSERT INTO sistema.usuarios_acao (id_usuario, id_acao) VALUES(3645, {$idParentComissao});

INSERT INTO sistema.usuarios_acao (id_usuario, id_acao) VALUES(2881, {$idParentComissaoAdicional});
INSERT INTO sistema.usuarios_acao (id_usuario, id_acao) VALUES(1032, {$idParentComissaoAdicional});
INSERT INTO sistema.usuarios_acao (id_usuario, id_acao) VALUES(1033, {$idParentComissaoAdicional});
INSERT INTO sistema.usuarios_acao (id_usuario, id_acao) VALUES(3645, {$idParentComissaoAdicional});

INSERT INTO sistema.usuarios_acao (id_usuario, id_acao) VALUES(2881, {$idParentComissaoAdicionalEditar});
INSERT INTO sistema.usuarios_acao (id_usuario, id_acao) VALUES(1032, {$idParentComissaoAdicionalEditar});
INSERT INTO sistema.usuarios_acao (id_usuario, id_acao) VALUES(1033, {$idParentComissaoAdicionalEditar});
INSERT INTO sistema.usuarios_acao (id_usuario, id_acao) VALUES(3645, {$idParentComissaoAdicionalEditar});
SQL
        );
    }

    public function down(): void
    {
        $queryParentComissao = $this->query("SELECT id FROM sistema.acao WHERE ds_label = 'Comissão' AND ds_module = 'produto' AND ds_controller = 'configuracao' AND ds_action = 'submenu'");
        $rowsComissao = $queryParentComissao->fetchAll();
        $idParentComissao = $rowsComissao[0]['id'];

        $queryParentComissaoAdicional = $this->query("SELECT id FROM sistema.acao WHERE ds_label = 'Comissão Adicional AgroBrasil' AND ds_module = 'produto' AND ds_controller = 'comissaoadicionalagrobrasil' AND ds_action = 'form'");
        $rowsComissaoAdicional = $queryParentComissaoAdicional->fetchAll();
        $idParentComissaoAdicional = $rowsComissaoAdicional[0]['id'];

        $this->execute(<<<SQL
DROP TABLE produto.comissao_adicional_agrobrasil;
UPDATE sistema.acao SET id_parent = 53 WHERE id = 1992;
DELETE FROM sistema.usuarios_acao WHERE id_acao in({$idParentComissaoAdicional}, {$idParentComissao});
DELETE FROM sistema.acao WHERE ds_label = 'Comissão Adicional AgroBrasil' AND ds_module = 'produto' AND ds_controller = 'comissaoadicionalagrobrasil' AND ds_action = 'form';
DELETE FROM sistema.acao WHERE ds_label = 'Comissão' AND ds_module = 'produto' AND ds_controller = 'configuracao' AND ds_action = 'submenu';
SQL
);
    }
}
