<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class TaskApiCorretores extends AbstractMigration
{
    public function up(): void
    {
        $this->execute(<<<SQL
CREATE TABLE IF NOT EXISTS log.erros_requisicoes_api_corretores
(
    id      SERIAL NOT NULL,
    ds_erro jsonb,
    CONSTRAINT pk_erros_requisicoes_api_corretores PRIMARY KEY (id)
) INHERITS (public.campos_default);

CREATE TABLE seguro.cotacoes_api
(
    id      SERIAL NOT NULL,
    ds_calculos jsonb,
    CONSTRAINT pk_cotacoes_api PRIMARY KEY (id)
) INHERITS (public.campos_default);

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 ('Coberturas e taxas da Cotação', 'seguro', 'cotacao', 'apicorretorescoberturastaxas', '', 1921, '', 'Retorno de coberturas e taxas para cotação.', 'A', '2025-10-28 10:00:41', 3379, nextval('sistema.acao_id_seq'::regclass))
                       , ('Cálculo da cotação - API de Corretores.', 'seguro', 'cotacao', 'apicorretorescalcular', '', 1921, '', 'Cálculo da cotação - API de Corretores.', 'A', '2025-10-28 10:00:41', 3379, nextval('sistema.acao_id_seq'::regclass))
                       , ('Cálculo Completo da Cotação - API de Corretores.', 'seguro', 'cotacao', 'cotacaocompleta', '', 1921, '', 'Cálculo Completo da Cotação - API de Corretores.', 'A', '2025-10-28 10:00:41', 3379, nextval('sistema.acao_id_seq'::regclass));

INSERT INTO sistema.roles_acao (id_usuario_criacao, dt_criacao, id_role, id_acao)
                        SELECT 2068 AS id_usuario_criacao, NOW() AS dt_criacao, 6 AS id_role, id AS id_acao
                          FROM sistema.acao
                         WHERE ds_module = 'seguro'
                           AND ds_controller = 'cotacao'
                           AND ds_action IN('apicorretorescoberturastaxas', 'apicorretorescalcular', 'cotacaocompleta');

INSERT INTO sistema.roles_acao (id_usuario_criacao, dt_criacao, id_role, id_acao)
                        SELECT 2068 AS id_usuario_criacao, NOW() AS dt_criacao, 24 AS id_role, id AS id_acao
                          FROM sistema.acao
                         WHERE ds_module = 'seguro'
                           AND ds_controller = 'cotacao'
                           AND ds_action IN('apicorretorescoberturastaxas', 'apicorretorescalcular', 'cotacaocompleta');

INSERT INTO sistema.roles_acao (id_usuario_criacao, dt_criacao, id_role, id_acao)
                        SELECT 2068 AS id_usuario_criacao, NOW() AS dt_criacao, 25 AS id_role, id AS id_acao
                          FROM sistema.acao
                         WHERE ds_module = 'seguro'
                           AND ds_controller = 'cotacao'
                           AND ds_action IN('apicorretorescoberturastaxas', 'apicorretorescalcular', 'cotacaocompleta');

INSERT INTO sistema.roles_acao (id_usuario_criacao, dt_criacao, id_role, id_acao)
                        SELECT 2068 AS id_usuario_criacao, NOW() AS dt_criacao, 28 AS id_role, id AS id_acao
                          FROM sistema.acao
                         WHERE ds_module = 'seguro'
                           AND ds_controller = 'cotacao'
                           AND ds_action IN('apicorretorescoberturastaxas', 'apicorretorescalcular', 'cotacaocompleta');

INSERT INTO sistema.roles_acao (id_usuario_criacao, dt_criacao, id_role, id_acao)
                        SELECT 2068 AS id_usuario_criacao, NOW() AS dt_criacao, 20 AS id_role, id AS id_acao
                          FROM sistema.acao
                         WHERE ds_module = 'seguro'
                           AND ds_controller = 'cotacao'
                           AND ds_action IN('apicorretorescoberturastaxas', 'apicorretorescalcular', 'cotacaocompleta');

INSERT INTO sistema.roles_acao (id_usuario_criacao, dt_criacao, id_role, id_acao)
                        SELECT 2068 AS id_usuario_criacao, NOW() AS dt_criacao, 12 AS id_role, id AS id_acao
                          FROM sistema.acao
                         WHERE ds_module = 'seguro'
                           AND ds_controller = 'cotacao'
                           AND ds_action IN('apicorretorescoberturastaxas', 'apicorretorescalcular', 'cotacaocompleta');

INSERT INTO sistema.roles_acao (id_usuario_criacao, dt_criacao, id_role, id_acao)
                        SELECT 2068 AS id_usuario_criacao, NOW() AS dt_criacao, 16 AS id_role, id AS id_acao
                          FROM sistema.acao
                         WHERE ds_module = 'seguro'
                           AND ds_controller = 'cotacao'
                           AND ds_action IN('apicorretorescoberturastaxas', 'apicorretorescalcular', 'cotacaocompleta');

INSERT INTO sistema.roles_acao (id_usuario_criacao, dt_criacao, id_role, id_acao)
                        SELECT 2068 AS id_usuario_criacao, NOW() AS dt_criacao, 4 AS id_role, id AS id_acao
                          FROM sistema.acao
                         WHERE ds_module = 'seguro'
                           AND ds_controller = 'cotacao'
                           AND ds_action IN('apicorretorescoberturastaxas', 'apicorretorescalcular', 'cotacaocompleta');
SQL
        );
    }

    public function down(): void
    {
        $this->execute(<<<SQL
DROP TABLE log.erros_requisicoes_api_corretores;
DROP TABLE seguro.cotacoes_api;

DELETE FROM sistema.roles_acao sra
      USING sistema.acao sa
      WHERE sra.id_acao = sa.id
        AND ds_module = 'seguro'
        AND ds_controller = 'cotacao'
        AND ds_action IN('apicorretorescoberturastaxas', 'apicorretorescalcular', 'cotacaocompleta');

DELETE FROM sistema.acao WHERE ds_module = 'seguro' AND ds_controller = 'cotacao' AND ds_action = 'apicorretorescoberturastaxas';
DELETE FROM sistema.acao WHERE ds_module = 'seguro' AND ds_controller = 'cotacao' AND ds_action = 'apicorretorescalcular';
DELETE FROM sistema.acao WHERE ds_module = 'seguro' AND ds_controller = 'cotacao' AND ds_action = 'cotacaocompleta';
SQL
        );
    }
}
