<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class TaskSr45870 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute(<<<SQL
            CREATE TABLE seguro.propriedade_car_restricao (
                id SERIAL,
                id_orientacao_restricao_tecnica INTEGER NOT NULL,
                ds_car VARCHAR(60) NOT NULL,
                ds_descricao TEXT NOT NULL,
                CONSTRAINT pk_propriedade_car_restricao PRIMARY KEY(id),
                CONSTRAINT fk_id_orientacao_restricao_tecnica FOREIGN KEY(id_orientacao_restricao_tecnica) 
                    REFERENCES seguro.orientacao_restricao_tecnica(id),
                CONSTRAINT unique_ds_car UNIQUE(ds_car)
            ) INHERITS (public.campos_default);

            CREATE INDEX idx_ds_car ON seguro.propriedade_car_restricao (ds_car);
            
            INSERT INTO sistema.acao (id_usuario_criacao, ds_label, ds_module, ds_controller, ds_action, id_parent, nr_ordem, fl_tipo)
                VALUES(2068, 'Propriedades', 'seguro', 'propriedadecar', 'submenu', 25, 1343, 'M');

            INSERT INTO sistema.roles_acao (id_role, id_acao, id_usuario_criacao) VALUES (20, currval('sistema.acao_id_seq'::regclass), 2068);
            INSERT INTO sistema.roles_acao (id_role, id_acao, id_usuario_criacao) VALUES (12, currval('sistema.acao_id_seq'::regclass), 2068);

            INSERT INTO sistema.acao (
                ds_label, ds_module, ds_controller, ds_action, id_parent, ds_descricao, fl_tipo, id_usuario_criacao, id
            ) VALUES (
                'Restrições',
                'seguro',
                'propriedadecarrestricao',
                'index',
                (SELECT id FROM sistema.acao WHERE ds_controller = 'propriedadecar' AND ds_action = 'submenu'),
                'Restrições',
                'M',
                2068,
                nextval('sistema.acao_id_seq'::regclass)
            );

            INSERT INTO sistema.roles_acao (id_role, id_acao, id_usuario_criacao) VALUES (20, currval('sistema.acao_id_seq'::regclass), 2068);
            INSERT INTO sistema.roles_acao (id_role, id_acao, id_usuario_criacao) VALUES (12, currval('sistema.acao_id_seq'::regclass), 2068);

            INSERT INTO sistema.acao (
                ds_label, ds_module, ds_controller, ds_action, ds_param, id_parent, ds_descricao, fl_tipo, id_usuario_criacao, id
            ) VALUES (
                'Editar',
                'seguro',
                'propriedadecarrestricao',
                'form',
                'id',
                (SELECT id FROM sistema.acao WHERE ds_controller = 'propriedadecar' AND ds_action = 'submenu'),
                'Ação para edição de Restrição Propriedade (CAR)',
                'L',
                2068,
                nextval('sistema.acao_id_seq'::regclass)
            );

            INSERT INTO sistema.roles_acao (id_role, id_acao, id_usuario_criacao) VALUES (20, currval('sistema.acao_id_seq'::regclass), 2068);
            INSERT INTO sistema.roles_acao (id_role, id_acao, id_usuario_criacao) VALUES (12, currval('sistema.acao_id_seq'::regclass), 2068);

            INSERT INTO sistema.acao (
                ds_label, ds_module, ds_controller, ds_action, ds_param, id_parent, ds_descricao, fl_tipo, id_usuario_criacao, id
            ) VALUES (
                'Deletar',
                'seguro',
                'propriedadecarrestricao',
                'delete',
                'id',
                (SELECT id FROM sistema.acao WHERE ds_controller = 'propriedadecar' AND ds_action = 'submenu'),
                'Ação para remover registro de Restrição Propriedade (CAR)',
                'L',
                2068,
                nextval('sistema.acao_id_seq'::regclass)
            );

            INSERT INTO sistema.roles_acao (id_role, id_acao, id_usuario_criacao) VALUES (20, currval('sistema.acao_id_seq'::regclass), 2068);
            INSERT INTO sistema.roles_acao (id_role, id_acao, id_usuario_criacao) VALUES (12, currval('sistema.acao_id_seq'::regclass), 2068);

            INSERT INTO sistema.acao (
                ds_label, ds_module, ds_controller, ds_action, ds_param, id_parent, fl_tipo, id_usuario_criacao, id) 
            VALUES (
                'Ativar/Desativar',
                'seguro',
                'propriedadecarrestricao',
                'active',
                'id',
                (SELECT id FROM sistema.acao WHERE ds_controller = 'propriedadecar' AND ds_action = 'submenu'),
                'L',
                2068,
                nextval('sistema.acao_id_seq'::regclass)
            );

            INSERT INTO sistema.roles_acao (id_role, id_acao, id_usuario_criacao) VALUES (20, currval('sistema.acao_id_seq'::regclass), 2068);
            INSERT INTO sistema.roles_acao (id_role, id_acao, id_usuario_criacao) VALUES (12, currval('sistema.acao_id_seq'::regclass), 2068);
SQL
    );
    }

    public function down(): void
    {
        $this->execute(<<<SQL
            DELETE FROM sistema.roles_acao WHERE id_acao IN (SELECT id FROM sistema.acao WHERE ds_controller = 'propriedadecar' OR ds_controller = 'propriedadecarrestricao');
            DELETE FROM sistema.acao WHERE ds_module = 'seguro' AND ds_controller = 'propriedadecarrestricao';
            DELETE FROM sistema.acao WHERE id_parent = 25 AND ds_controller = 'propriedadecar';
            DROP TABLE seguro.propriedade_car_restricao;
SQL
        );
        
    }
}
