<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class Task2212011416 extends AbstractMigration
{
    public function up(): void
    {
        $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 ('Relatório de Vistorias Prévia – Alterações', 'relatorio', 'tecnica', 'vistoriapreviaalteracoes', 'formvistoriapreviaalteracoes', 709, '', 'Relatório de Vistorias Prévia – Alterações', 'R', '2022-12-20 11:23:40', 3379, nextval('sistema.acao_id_seq'::regclass));
INSERT INTO sistema.tipo_status (ds_tipo_status, ds_chave) VALUES ('Vistoria Prévia - Status Alteração', 'VP_STATUS_ALTERACAO');
ALTER TABLE seguro.propostas_vistorias_previas ADD COLUMN id_status_alteracao INTEGER;
ALTER TABLE seguro.propostas_vistorias_previas ADD CONSTRAINT fk_propostas_vistorias_previas_status FOREIGN KEY (id_status_alteracao) REFERENCES sistema.status (id);
ALTER TABLE seguro.propostas_vistorias_previas_historico ADD COLUMN id_status_alteracao INTEGER;
ALTER TABLE seguro.propostas_vistorias_previas_historico ADD CONSTRAINT fk_propostas_vistorias_previas_historico_status FOREIGN KEY (id_status_alteracao) REFERENCES sistema.status (id);
SQL
);
        $query = $this->query("SELECT id FROM sistema.acao WHERE ds_module = 'relatorio' AND ds_controller = 'tecnica' AND ds_action = 'vistoriapreviaalteracoes'");
        $rows = $query->fetchAll();
        $idParent = $rows[0]['id'];

        $this->execute(<<<SQL
insert into sistema.roles_acao(id_role, id_acao) values(20, {$idParent});
SQL
        );

        $query = $this->query("SELECT id FROM sistema.tipo_status WHERE ds_chave = 'VP_STATUS_ALTERACAO'");
        $rows = $query->fetchAll();
        $idParent = $rows[0]['id'];

        $this->execute(<<<SQL
insert into sistema.status(ds_status, cd_status, ds_chave, id_tipo_status) values('Aguardando Endosso', 1, 'AGUARDANDO_ENDOSSO', {$idParent});
insert into sistema.status(ds_status, cd_status, ds_chave, id_tipo_status) values('Endosso Efetivado', 2, 'ENDOSSO_EFETIVADO', {$idParent});
SQL
        );

        $query = $this->query("SELECT id FROM sistema.status WHERE ds_chave = 'AGUARDANDO_ENDOSSO' AND id_tipo_status = {$idParent}");
        $rows = $query->fetchAll();
        $idParent = $rows[0]['id'];

        $this->execute(<<<SQL
UPDATE seguro.propostas_vistorias_previas
   SET id_status_alteracao = {$idParent}
 WHERE id_status_analise in(173, 174, 175, 176)
   AND fl_necessario_endosso IS TRUE;

UPDATE seguro.propostas_vistorias_previas_historico
   SET id_status_alteracao = {$idParent}
 WHERE id_status_analise in(173, 174, 175, 176)
   AND fl_necessario_endosso IS TRUE;

CREATE TABLE seguro.vistorias_previas_historico_observacoes(
    id SERIAL NOT NULL,
    id_propostas_observacoes INTEGER NOT NULL,
    id_propostas_vistorias_previas_historico INTEGER NOT NULL,
    CONSTRAINT pk_vistorias_previas_historico_observacoes PRIMARY KEY (id),
    CONSTRAINT fk_vistorias_previas_historico_observacoes_observacoes FOREIGN KEY (id_propostas_observacoes) REFERENCES seguro.propostas_observacoes (id),
    CONSTRAINT fk_vistorias_previas_historico_observacoes_historico FOREIGN KEY (id_propostas_vistorias_previas_historico) REFERENCES seguro.propostas_vistorias_previas_historico (id)
) INHERITS (public.campos_default);
SQL
        );
    }

    public function down(): void
    {
        $query = $this->query("SELECT id FROM sistema.acao WHERE ds_module = 'relatorio' AND ds_controller = 'tecnica' AND ds_action = 'vistoriapreviaalteracoes'");
        $rows = $query->fetchAll();
        $idParent = $rows[0]['id'];

        $this->execute(<<<SQL
DELETE FROM sistema.roles_acao WHERE id_acao = {$idParent};
DELETE FROM sistema.acao WHERE ds_module = 'relatorio' AND ds_controller = 'tecnica' AND ds_action = 'vistoriapreviaalteracoes';
ALTER TABLE seguro.propostas_vistorias_previas_historico DROP CONSTRAINT fk_propostas_vistorias_previas_historico_status;
ALTER TABLE seguro.propostas_vistorias_previas_historico DROP COLUMN id_status_alteracao;
ALTER TABLE seguro.propostas_vistorias_previas DROP CONSTRAINT fk_propostas_vistorias_previas_status;
ALTER TABLE seguro.propostas_vistorias_previas DROP COLUMN id_status_alteracao;
DELETE FROM sistema.tipo_status WHERE ds_chave = 'VP_STATUS_ALTERACAO';
DROP TABLE seguro.vistorias_previas_historico_observacoes;
SQL
);
    }
}
