<?php

declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class Task2307141439 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute(<<<SQL
            CREATE TABLE sinistro.parametros_agronomos_responsaveis (
                id SERIAL NOT NULL,
                id_funcionario INTEGER NOT NULL,
                id_estado INTEGER NOT NULL,
                CONSTRAINT pk_parametros_agronomos_responsaveis PRIMARY KEY(id),
                CONSTRAINT fk_funcionarios FOREIGN KEY (id_funcionario)
                    REFERENCES sistema.funcionarios (id),
                CONSTRAINT fk_estados FOREIGN KEY (id_estado)
                    REFERENCES sistema.estados (id),
                UNIQUE (id_funcionario, id_estado)
            ) INHERITS (public.campos_default);
            
            CREATE TABLE sinistro.parametros_agronomos_responsaveis_culturas (
                id_parametro_agronomo_responsavel INTEGER NOT NULL,
                id_cultura INTEGER NOT NULL,
                CONSTRAINT pk_parametros_agronomos_responsaveis_culturas PRIMARY KEY(id_parametro_agronomo_responsavel, id_cultura),
                CONSTRAINT fk_parametros_agronomos_responsaveis FOREIGN KEY (id_parametro_agronomo_responsavel)
                    REFERENCES sinistro.parametros_agronomos_responsaveis (id),
                CONSTRAINT fk_culturas FOREIGN KEY (id_cultura)
                    REFERENCES produto.culturas (id)
            ) INHERITS (public.campos_default);

            INSERT INTO sistema.acao (
                dt_criacao,
                ds_label,
                ds_module,
                ds_controller,
                ds_action,
                id_parent,
                ds_descricao,
                fl_tipo,
                id
            )
                VALUES (
                    now(),
                    'Parâmetros Agrônomos Responsáveis',
                    'sistema',
                    'parametrosagronomosresponsaveis',
                    'index',
                    4,
                    'Parâmetros Agrônomos Responsáveis',
                    'M',
                    nextval('sistema.acao_id_seq'::regclass)
                );

            INSERT INTO sistema.roles_acao (id_role, id_acao) VALUES(16, currval('sistema.acao_id_seq'));

            INSERT INTO sistema.acao (
                dt_criacao,
                ds_label,
                ds_module,
                ds_controller,
                ds_action,
                id_parent,
                ds_descricao,
                fl_tipo,
                id
            )
                VALUES (
                    now(),
                    'Editar',
                    'sistema',
                    'parametrosagronomosresponsaveis',
                    'form',
                    2040,
                    'Ação para edição de Parâmetros Agrônomos Responsáveis',
                    'L',
                    nextval('sistema.acao_id_seq'::regclass)
                );
            
            INSERT INTO sistema.roles_acao (id_role, id_acao) VALUES(16, currval('sistema.acao_id_seq'));
            
            INSERT INTO sistema.acao (
                dt_criacao,
                ds_label,
                ds_module,
                ds_controller,
                ds_action,
                id_parent,
                ds_descricao,
                fl_tipo,
                id
            )
                VALUES (
                    now(),
                    'Deletar',
                    'sistema',
                    'parametrosagronomosresponsaveis',
                    'delete',
                    2040,
                    'Ação para remover registro de Parâmetros Agrônomos Responsáveis',
                    'L',
                    nextval('sistema.acao_id_seq'::regclass)
                );
SQL
);
    }

    public function down(): void
    {
        $this->execute(<<<SQL
            DROP TABLE sinistro.parametros_agronomos_responsaveis_culturas;
            DROP TABLE sinistro.parametros_agronomos_responsaveis;
            DELETE FROM sistema.roles_acao WHERE id_acao IN (
                SELECT
                    id
                FROM 
                    sistema.acao 
                WHERE 
                    ds_module = 'sistema' 
                    AND ds_controller = 'parametrosagronomosresponsaveis'
            );
            DELETE FROM sistema.acao WHERE ds_module = 'sistema' AND ds_label = 'Parâmetros Agrônomos Responsáveis';
SQL
);
    }
}
