<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class Task2310271211V2 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute(<<<SQL
        
            CREATE TABLE sinistro.tipos_motivos_quadra_nao_vistoriada (
                id SERIAL NOT NULL,
                ds_descricao VARCHAR(200) NOT NULL,
                ds_chave VARCHAR(50) NOT NULL
            ) INHERITS (public.campos_default);

            ALTER TABLE sinistro.tipos_motivos_quadra_nao_vistoriada 
                ADD CONSTRAINT pk_tipos_motivos_quadra_nao_vistoriada PRIMARY KEY(id);

            INSERT INTO sinistro.tipos_motivos_quadra_nao_vistoriada (id_usuario_criacao, dt_criacao, id, ds_descricao, ds_chave)
                VALUES(2068, now(), 1, 'Dispensa da vistoria', 'DISPENSA_VISTORIA'),
                      (2068, now(), 2, 'Dispensa do item', 'DISPENSA_ITEM'),
                      (2068, now(), 3, 'Adiamento do item', 'ADIAMENTO_ITEM'),
                      (2068, now(), 4, 'Encerramento do item', 'ENCERRAMENTO_ITEM'),
                      (2068, now(), 5, 'Dispensa do item (automático)', 'AUTOMATICO');

            SELECT setval('sinistro.tipos_motivos_quadra_nao_vistoriada_id_seq', 5, true);

            ALTER TABLE sinistro.laudos_finais ADD COLUMN id_motivo_vistoria_nao_vistoriada INT;
            
            CREATE TABLE sinistro.motivos_quadra_nao_vistoriada_tipos (
                id_motivo_quadra_nao_vistoriada INTEGER,
                id_tipo_motivo_quadra_nao_vistoriada INTEGER,
                PRIMARY KEY (id_motivo_quadra_nao_vistoriada, id_tipo_motivo_quadra_nao_vistoriada),
                FOREIGN KEY (id_motivo_quadra_nao_vistoriada) REFERENCES sinistro.motivos_quadra_nao_vistoriada(id),
                FOREIGN KEY (id_tipo_motivo_quadra_nao_vistoriada) REFERENCES sinistro.tipos_motivos_quadra_nao_vistoriada(id)
            ) INHERITS (public.campos_default);


            INSERT INTO sinistro.motivos_quadra_nao_vistoriada (id_usuario_criacao, dt_criacao, id, ds_motivo, fl_laudo, id_status) 
                VALUES (2068, now(), 14, 'Acompanhante não estava presente', true, (select id from sistema.status where ds_chave = 'AGUARDANDO_VISTORIA' AND cd_status = 1)),
                    (2068, now(), 15, 'Vistoria não concluída', true, (select id from sistema.status where ds_chave = 'AGUARDANDO_VISTORIA' AND cd_status = 1)),
                    (2068, now(), 16, 'Abandono de área', true, (select id from sistema.status where ds_chave = 'FINALIZADO' AND cd_status = 2)),    
                    (2068, now(), 17, 'Primeiro ano de plantio', true, (select id from sistema.status where ds_chave = 'FINALIZADO' AND cd_status = 2)),      
                    (2068, now(), 18, 'Restrições técnicas', true, (select id from sistema.status where ds_chave = 'FINALIZADO' AND cd_status = 2)),     
                    (2068, now(), 19, 'Manejo inadequado na lavoura/pomar', true, (select id from sistema.status where ds_chave = 'FINALIZADO' AND cd_status = 2)),   
                    (2068, now(), 20, 'Lâmina d''agua', true, (select id from sistema.status where ds_chave = 'FINALIZADO' AND cd_status = 2)), 
                    (2068, now(), 21, 'Inundação total', true, (select id from sistema.status where ds_chave = 'FINALIZADO' AND cd_status = 2)), 
                    (2068, now(), 22, 'Conduta inadequada/atípica', true, (select id from sistema.status where ds_chave = 'FINALIZADO' AND cd_status = 2)), 
                    (2068, now(), 23, 'Ocorrência de Evento não coberto', true, (select id from sistema.status where ds_chave = 'FINALIZADO' AND cd_status = 2)),
                    (2068, now(), 24, 'Ausência de Irrigação', true, (select id from sistema.status where ds_chave = 'FINALIZADO' AND cd_status = 2)), 
                    (2068, now(), 25, 'Cultura Avaliada divergente da cultura contratada', true, (select id from sistema.status where ds_chave = 'FINALIZADO' AND cd_status = 2));

            INSERT INTO sinistro.motivos_quadra_nao_vistoriada_tipos 
                (id_usuario_criacao, dt_criacao, id_motivo_quadra_nao_vistoriada, id_tipo_motivo_quadra_nao_vistoriada)
                VALUES 
                    (2068, now(), 1, 1),
                    (2068, now(), 1, 2),
                    (2068, now(), 1, 4),
                    (2068, now(), 2, 1),
                    (2068, now(), 2, 2),
                    (2068, now(), 2, 4),
                    (2068, now(), 3, 1),
                    (2068, now(), 3, 2),
                    (2068, now(), 3, 4),
                    (2068, now(), 4, 1),
                    (2068, now(), 4, 2),
                    (2068, now(), 4, 4),
                    (2068, now(), 5, 1),
                    (2068, now(), 5, 2),
                    (2068, now(), 5, 4),
                    (2068, now(), 7, 1),
                    (2068, now(), 7, 2),
                    (2068, now(), 7, 4),
                    (2068, now(), 8, 3),
                    (2068, now(), 12, 1),
                    (2068, now(), 12, 2),
                    (2068, now(), 12, 4),
                    (2068, now(), 13, 3),
                    (2068, now(), 14, 3),
                    (2068, now(), 15, 5),
                    (2068, now(), 16, 1),
                    (2068, now(), 16, 2),
                    (2068, now(), 16, 4),
                    (2068, now(), 17, 1),
                    (2068, now(), 17, 2),
                    (2068, now(), 17, 4),
                    (2068, now(), 18, 1),
                    (2068, now(), 18, 2),
                    (2068, now(), 18, 4),
                    (2068, now(), 19, 1),
                    (2068, now(), 19, 2),
                    (2068, now(), 19, 4),
                    (2068, now(), 20, 1),
                    (2068, now(), 20, 2),
                    (2068, now(), 20, 4),
                    (2068, now(), 21, 1),
                    (2068, now(), 21, 2),
                    (2068, now(), 21, 4),
                    (2068, now(), 22, 1),
                    (2068, now(), 22, 2),
                    (2068, now(), 22, 4),
                    (2068, now(), 23, 1),
                    (2068, now(), 23, 2),
                    (2068, now(), 23, 4),
                    (2068, now(), 24, 1),
                    (2068, now(), 24, 2),
                    (2068, now(), 24, 4),
                    (2068, now(), 25, 1),
                    (2068, now(), 25, 2),
                    (2068, now(), 25, 4);

                SELECT setval('sinistro.motivos_quadra_nao_vistoriada_id_seq', 25, true);
                    
                    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
                        (
                            'Gerar Formulário de Vistoria Final',
                            'sinistro2',
                            'processo',
                            'formulariovistoriacampo',
                            '',
                            1597,
                            '',
                            '',
                            'A',
                            '2024-01-15 09:46:10',
                            4474,
                            nextval('sistema.acao_id_seq' :: regclass)
                        );
SQL
        );
        
    }

    public function down(): void
    {
        $this->execute(<<<SQL
            DROP TABLE sinistro.motivos_quadra_nao_vistoriada_tipos;
            DROP TABLE sinistro.tipos_motivos_quadra_nao_vistoriada;

            DELETE FROM sinistro.motivos_quadra_nao_vistoriada WHERE id IN(14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25);
            ALTER TABLE sinistro.laudos_finais DROP COLUMN id_motivo_vistoria_nao_vistoriada;
SQL
        );
    }
}
