<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class Task2210071847 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute(<<<SQL
            CREATE TABLE sinistro.processos_coberturas_pendencias (
                id SERIAL,
                id_processo INTEGER NOT NULL,
                id_cobertura INTEGER NOT NULL,
                id_produto INTEGER NOT NULL,
                ds_observacao TEXT NOT NULL,
                CONSTRAINT pk_processos_coberturas_pendencias PRIMARY KEY (id),
                CONSTRAINT fk_processos_coberturas_pendencias_processo FOREIGN KEY (id_processo) REFERENCES sinistro.processos (id),
                CONSTRAINT fk_processos_coberturas_pendencias_cobertura FOREIGN KEY (id_cobertura) REFERENCES produto.coberturas (id),
                CONSTRAINT fk_processos_coberturas_pendencias_produto FOREIGN KEY (id_produto) REFERENCES produto.produtos (id)
            ) INHERITS (public.campos_default);
            
            INSERT INTO atendimento.tipo_pendencia(ds_tipo_pendencia, ds_chave) 
                VALUES ('Pendências das coberturas de um processo', 'PENDENCIA_PROCESSOS_COBERTURAS');

            INSERT INTO atendimento.pendencias(ds_chave, ds_nome_pendencia, ds_descricao_pendencia, id_tipo_pendencia) 
                VALUES ('PEND_AVISO_ENCERRAMENTO_COLHEITA', 'Corretor - Exclusão de aviso de encerramento de colheita', 'Corretor - Exclusão de aviso de encerramento de colheita', currval('atendimento.tipo_pendencia_id_seq')),
                       ('PEND_ENCERRAMENTO_PARCIAL', 'Corretor - Encerramento parcial', 'Corretor - Encerramento parcial', currval('atendimento.tipo_pendencia_id_seq')),
                       ('PEND_DIGITACAO_LAUDOS', 'Vistoriador - Digitação de Laudos', 'Vistoriador - Digitação de Laudos', currval('atendimento.tipo_pendencia_id_seq')),
                       ('PEND_SOLICITACAO_LAUDOS', 'Vistoriador - Solicitação de Laudos', 'Vistoriador - Solicitação de Laudos', currval('atendimento.tipo_pendencia_id_seq')),
                       ('PEND_DECLARACAO_PERICIA', 'Vistoriador - Declaração de Pericia', 'Vistoriador - Declaração de Pericia', currval('atendimento.tipo_pendencia_id_seq')),
                       ('PEND_AUTORIZACAO', 'Vistoriador - Autorização', 'Vistoriador - Autorização', currval('atendimento.tipo_pendencia_id_seq')),
                       ('PEND_NOVA_AVALIACAO', 'Vistoriador - Nova avaliação', 'Vistoriador - Nova avaliação', currval('atendimento.tipo_pendencia_id_seq')),
                       ('PEND_RETORNAR_CORRIGIR_LAUDO', 'Vistoriador - Retornar para corrigir Laudo', 'Vistoriador - Retornar para corrigir Laudo', currval('atendimento.tipo_pendencia_id_seq')),
                       ('PEND_DISPENSA_PRELIMINAR', 'Vistoriador - Dispensa de Preliminar', 'Vistoriador - Dispensa de Preliminar', currval('atendimento.tipo_pendencia_id_seq'));
            
            INSERT INTO sistema.acao(ds_label, ds_module, ds_controller, ds_action, id_parent, ds_descricao) 
                VALUES ('Salvar pendências por cobertura de um processo', 'sinistro2', 'liquidacao', 'savependenciasprocessocobertura', 1638, 'Salvar pendências por cobertura de um processo');
SQL
        );
    }

    public function down(): void
    {
        $this->execute(<<<SQL
            DELETE FROM sistema.acao WHERE ds_module = 'sinistro2' AND ds_controller = 'liquidacao' AND ds_action = 'savependenciasprocessocobertura';
            DELETE FROM atendimento.pendencias WHERE id_tipo_pendencia = (SELECT id FROM atendimento.tipo_pendencia WHERE ds_chave = 'PENDENCIA_PROCESSOS_COBERTURAS');
            DELETE FROM atendimento.tipo_pendencia WHERE ds_chave = 'PENDENCIA_PROCESSOS_COBERTURAS';
            DROP TABLE sinistro.processos_coberturas_pendencias;
SQL
        );
    }
}
