<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class Task2112202237 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute(<<<SQL
            CREATE TABLE seguro.trocas_corretagem (
                id SERIAL NOT NULL,
                id_proponente INTEGER NOT NULL,
                id_status INTEGER NOT NULL,
                id_usuario INTEGER NOT NULL,
                ds_descricao TEXT,
                CONSTRAINT pk_trocas_corretagem PRIMARY KEY (id),
                CONSTRAINT fk_trocas_corretagem_proponente FOREIGN KEY (id_proponente) REFERENCES seguro.proponentes(id),
                CONSTRAINT fk_trocas_corretagem_status FOREIGN KEY (id_status) REFERENCES sistema.status(id),
                CONSTRAINT fk_trocas_corretagem_usuario FOREIGN KEY (id_usuario) REFERENCES sistema.usuarios(id)
            ) INHERITS (public.campos_default);

            CREATE TABLE seguro.trocas_corretagem_arquivos (
                id SERIAL NOT NULL,
                id_troca_corretagem INTEGER NOT NULL,
                ds_nome_arquivo name NOT NULL,
                ds_nome_original_arquivo name NOT NULL,
                CONSTRAINT pk_trocas_corretagem_arquivos PRIMARY KEY (id),
                CONSTRAINT fk_trocas_corretagem_arquivos_troca_corretagem FOREIGN KEY (id_troca_corretagem) REFERENCES seguro.trocas_corretagem(id)
            ) INHERITS (public.campos_default);

            INSERT INTO sistema.tipo_status (ds_tipo_status, ds_chave) VALUES ('Troca de corretagem', 'TROCA_CORRETAGEM');
            INSERT INTO sistema.status (ds_status, cd_status, ds_chave, id_tipo_status) VALUES ('Novo', 1, 'NOVO', currval('sistema.tipo_status_id_seq'));
            INSERT INTO sistema.status (ds_status, cd_status, ds_chave, id_tipo_status) VALUES ('Aberto', 2, 'ABERTO', currval('sistema.tipo_status_id_seq'));
            INSERT INTO sistema.status (ds_status, cd_status, ds_chave, id_tipo_status) VALUES ('Aceito', 3, 'ACEITO', currval('sistema.tipo_status_id_seq'));
            INSERT INTO sistema.status (ds_status, cd_status, ds_chave, id_tipo_status) VALUES ('Negado', 4, 'NEGADO', currval('sistema.tipo_status_id_seq'));

            INSERT INTO sistema.acao (id_usuario_criacao, ds_label, ds_module, ds_controller, ds_action, id_parent, nr_ordem, ds_descricao, fl_tipo, fl_somente_responsavel)
                   VALUES (3491, 'Troca de Corretagem', 'seguro', 'trocacorretagem', 'index', 27, 1284, 'Troca de Corretagem', 'M', 'f');
            
            INSERT INTO sistema.roles_acao (id_role, id_acao) VALUES (6, currval('sistema.acao_id_seq'));
            INSERT INTO sistema.roles_acao (id_role, id_acao) VALUES (28, currval('sistema.acao_id_seq'));

            INSERT INTO sistema.roles_acao (id_role, id_acao) VALUES (20, currval('sistema.acao_id_seq'));
            INSERT INTO sistema.roles_acao (id_role, id_acao) VALUES (4, currval('sistema.acao_id_seq'));
            
            INSERT INTO sistema.acao (id_usuario_criacao, ds_label, ds_module, ds_controller, ds_action, id_parent, nr_ordem, ds_descricao, fl_tipo, fl_somente_responsavel)
                   VALUES (3491, 'Editar', 'seguro', 'trocacorretagem', 'form', currval('sistema.acao_id_seq'), 1285, 'Editar', 'L', 'f');
            
            INSERT INTO sistema.roles_acao (id_role, id_acao) VALUES (6, currval('sistema.acao_id_seq'));
            INSERT INTO sistema.roles_acao (id_role, id_acao) VALUES (28, currval('sistema.acao_id_seq'));

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

SQL
        );
    }

    public function down(): void
    {
        $this->execute(<<<SQL
            DROP TABLE seguro.trocas_corretagem_arquivos;
            DROP TABLE seguro.trocas_corretagem;
            DELETE FROM sistema.roles_acao WHERE id_role = 6 AND id_acao in (SELECT id FROM sistema.acao WHERE id_usuario_criacao = 3491 AND ds_label = 'Editar' AND ds_module = 'seguro' AND ds_controller = 'trocacorretagem' AND ds_action = 'form');
            DELETE FROM sistema.roles_acao WHERE id_role = 6 AND id_acao in (SELECT id FROM sistema.acao WHERE id_usuario_criacao = 3491 AND ds_label = 'Troca de Corretagem' AND ds_module = 'seguro' AND ds_controller = 'trocacorretagem' AND ds_action = 'index');
            DELETE FROM sistema.acao WHERE id_usuario_criacao = 3491 AND ds_label = 'Editar' AND ds_module = 'seguro' AND ds_controller = 'trocacorretagem' AND ds_action = 'form';
            DELETE FROM sistema.acao WHERE id_usuario_criacao = 3491 AND ds_label = 'Troca de Corretagem' AND ds_module = 'seguro' AND ds_controller = 'trocacorretagem' AND ds_action = 'index';
            DELETE FROM sistema.status WHERE id_tipo_status = (SELECT id FROM sistema.tipo_status WHERE ds_tipo_status = 'Troca de corretagem' AND ds_chave = 'TROCA_CORRETAGEM');
            DELETE FROM sistema.tipo_status WHERE ds_tipo_status = 'Troca de corretagem' AND ds_chave = 'TROCA_CORRETAGEM';
SQL
        );
    }
}
