<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class Task2111101831 extends AbstractMigration
{
    public function up(): void
    {
        $this->upAcao();
        $this->upNovaTabela();
    }

    private function upAcao()
    {
        $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 ('Gestão de Comissão', 'produto', 'gestaocomissao', 'index', '', 53, '', 'Gestão de Comissão', 'M', '2022-01-04 14:40:21', 3379, nextval('sistema.acao_id_seq'::regclass));
SQL
        );

        $queryParent = $this->query("SELECT id FROM sistema.acao WHERE  ds_module = 'produto' AND ds_controller = 'gestaocomissao' AND ds_action = 'index'");
        $rows = $queryParent->fetchAll();
        $idParent = $rows[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', 'gestaocomissao', 'form', 'id', $idParent, 'edit.png', '0', 'L', '2022-01-04 15:54:09', 3379, nextval('sistema.acao_id_seq'::regclass));
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 ('Ativar/Desativar', 'produto', 'gestaocomissao', 'active', 'id', $idParent, 'active.png', '1', 'L', '2022-01-04 15:54:09', 3379, nextval('sistema.acao_id_seq'::regclass));
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 ('Deletar', 'produto', 'gestaocomissao', 'delete', 'id', $idParent, 'delete.png', '2', 'L', '2022-01-04 15:54:09', 3379, nextval('sistema.acao_id_seq'::regclass));
SQL
        );
    }

    private function upNovaTabela()
    {
        $this->execute(<<<SQL
CREATE TABLE produto.gestao_comissao(
  id SERIAL NOT NULL,
  ds_descricao VARCHAR(120) NOT NULL,
  vl_comissao NUMERIC(12, 2) NOT NULL,
  CONSTRAINT pk_gestao_comissao PRIMARY KEY (id)
) INHERITS (public.campos_default);

CREATE TABLE produto.gestao_comissao_cultura_usuario(
  id SERIAL NOT NULL,
  id_gestao_comissao INT NOT NULL,
  id_cultura INT NOT NULL,
  id_usuario INT NOT NULL,
  CONSTRAINT pk_gestao_comissao_cultura_usuario PRIMARY KEY (id),
  CONSTRAINT fk_gestao_comissao_cultura_usuario_gestao FOREIGN KEY (id_gestao_comissao) REFERENCES produto.gestao_comissao (id),
  CONSTRAINT fk_gestao_comissao_cultura_usuario_cultura FOREIGN KEY (id_cultura) REFERENCES produto.culturas (id),
  CONSTRAINT fk_gestao_comissao_cultura_usuario_usuario FOREIGN KEY (id_usuario) REFERENCES sistema.usuarios (id)
) INHERITS (public.campos_default);
SQL
        );
    }

    public function down(): void
    {
        $this->downAcao();
        $this->downNovaTabela();
    }

    private function downAcao()
    {
        $this->execute(<<<SQL
DELETE FROM sistema.acao WHERE ds_module = 'produto' AND ds_controller = 'gestaocomissao';
SQL
        );
    }

    private function downNovaTabela()
    {
        $this->execute(<<<SQL
DROP TABLE produto.gestao_comissao_cultura_usuario;
DROP TABLE produto.gestao_comissao;
SQL
        );
    }
}
