<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class Task2310271211 extends AbstractMigration
{
    public function up(): void
    {
        $this->upDeparaStatus();
        $this->upStatusItensVistoriaFinal();
        $this->upEstrutura();
    }

    private function upDeparaStatus(): void
    {
        $this->execute(<<<SQL
            DELETE FROM sistema.status WHERE id = 209;
            UPDATE sistema.status SET ds_status = 'Encaminhada' WHERE id = 211;
            UPDATE sistema.status SET ds_status = 'Aguardando Vistoria' WHERE id = 109;
            UPDATE sistema.status SET ds_status = 'Transmitida' WHERE id = 110;
            UPDATE sistema.status SET ds_status = 'Cancelada' WHERE id = 207;
SQL
        );
    }

    private function upStatusItensVistoriaFinal()
    {
        $this->execute(<<<SQL
            ALTER TABLE sinistro.motivos_quadra_nao_vistoriada ADD COLUMN id_status INT;

            INSERT INTO sinistro.motivos_quadra_nao_vistoriada (id_usuario_criacao, dt_criacao, id, ds_motivo, fl_laudo, id_status)
                VALUES(2068, now(), 13, 'Vistoria Frustrada', true, (SELECT id FROM sistema.status WHERE id_tipo_status = 35 AND ds_chave = 'AGUARDANDO_VISTORIA'));

            UPDATE sinistro.motivos_quadra_nao_vistoriada SET id_status = (SELECT id FROM sistema.status WHERE id_tipo_status = 35 AND ds_chave = 'FINALIZADO') WHERE id = 1;
            UPDATE sinistro.motivos_quadra_nao_vistoriada SET id_status = (SELECT id FROM sistema.status WHERE id_tipo_status = 35 AND ds_chave = 'FINALIZADO') WHERE id = 2;
            UPDATE sinistro.motivos_quadra_nao_vistoriada SET id_status = (SELECT id FROM sistema.status WHERE id_tipo_status = 35 AND ds_chave = 'FINALIZADO') WHERE id = 3;
            UPDATE sinistro.motivos_quadra_nao_vistoriada SET id_status = (SELECT id FROM sistema.status WHERE id_tipo_status = 35 AND ds_chave = 'FINALIZADO') WHERE id = 4;
            UPDATE sinistro.motivos_quadra_nao_vistoriada SET id_status = (SELECT id FROM sistema.status WHERE id_tipo_status = 35 AND ds_chave = 'FINALIZADO') WHERE id = 5;
            UPDATE sinistro.motivos_quadra_nao_vistoriada SET id_status = (SELECT id FROM sistema.status WHERE id_tipo_status = 35 AND ds_chave = 'FINALIZADO') WHERE id = 6;
            UPDATE sinistro.motivos_quadra_nao_vistoriada SET id_status = (SELECT id FROM sistema.status WHERE id_tipo_status = 35 AND ds_chave = 'FINALIZADO') WHERE id = 7;
            UPDATE sinistro.motivos_quadra_nao_vistoriada SET id_status = (SELECT id FROM sistema.status WHERE id_tipo_status = 35 AND ds_chave = 'AGUARDANDO_VISTORIA') WHERE id = 8;
            UPDATE sinistro.motivos_quadra_nao_vistoriada SET id_status = (SELECT id FROM sistema.status WHERE id_tipo_status = 35 AND ds_chave = 'FINALIZADO') WHERE id = 9;
            UPDATE sinistro.motivos_quadra_nao_vistoriada SET id_status = (SELECT id FROM sistema.status WHERE id_tipo_status = 35 AND ds_chave = 'AGUARDANDO_VISTORIA') WHERE id =10;
            UPDATE sinistro.motivos_quadra_nao_vistoriada SET id_status = (SELECT id FROM sistema.status WHERE id_tipo_status = 35 AND ds_chave = 'FINALIZADO') WHERE id =11;
            UPDATE sinistro.motivos_quadra_nao_vistoriada SET id_status = (SELECT id FROM sistema.status WHERE id_tipo_status = 35 AND ds_chave = 'FINALIZADO') WHERE id =12;
            ALTER TABLE sinistro.motivos_quadra_nao_vistoriada ALTER COLUMN id_status SET NOT NULL;

            ALTER TABLE sinistro.laudos_finais_itens_segurados ADD COLUMN id_status INT;
            UPDATE sinistro.laudos_finais_itens_segurados SET id_status = (SELECT id FROM sistema.status WHERE id_tipo_status = 35 AND ds_chave = 'FINALIZADO');
            UPDATE sinistro.laudos_finais_itens_segurados SET id_status = (SELECT id FROM sistema.status WHERE id_tipo_status = 35 AND ds_chave = 'AGUARDANDO_VISTORIA') WHERE id_motivo_quadra_nao_vistoriada IN (8, 10);

SQL
        );
    }

    private function upEstrutura(): void
    {
        $this->execute(<<<SQL

            ALTER TABLE sinistro.laudos_finais ADD COLUMN ds_responsavel nome;
            ALTER TABLE sinistro.laudos_finais ADD COLUMN cpf_responsavel character(20);
            ALTER TABLE sinistro.laudos_finais ADD COLUMN ds_tipo_responsavel varchar(50);
            ALTER TABLE sinistro.laudos_finais ADD COLUMN svg_assinatura_responsavel TEXT;
            ALTER TABLE sinistro.laudos_finais ADD COLUMN svg_assinatura_perito_principal TEXT;
            ALTER TABLE sinistro.laudos_finais ADD COLUMN svg_assinatura_perito_secundario TEXT;

            ALTER TABLE sinistro.laudos_finais_itens_segurados ADD COLUMN fl_assinado BOOLEAN DEFAULT false;

            CREATE TABLE sinistro.laudos_finais_agronomos_agro (
                id SERIAL NOT NULL,
                id_laudo_final INT NOT NULL,
                id_funcionario INT NOT NULL,
                svg_assinatura TEXT,
                CONSTRAINT pk_laudos_finais_agronomos_agro PRIMARY KEY (id),
                CONSTRAINT fk_laudos_finais_agronomos_agro_laudo_final FOREIGN KEY (id_laudo_final) REFERENCES sinistro.laudos_finais (id),
                CONSTRAINT fk_laudos_finais_agronomos_agro_funcionario FOREIGN KEY (id_funcionario) REFERENCES sistema.funcionarios (id)
            ) INHERITS (public.campos_default);
SQL
        );
    }
    
    public function down(): void
    {
        $this->execute(<<<SQL

            DROP TABLE sinistro.laudos_finais_agronomos_agro;
            ALTER TABLE sinistro.laudos_finais DROP COLUMN svg_assinatura_perito_secundario;
            ALTER TABLE sinistro.laudos_finais DROP COLUMN svg_assinatura_perito_principal;
            ALTER TABLE sinistro.laudos_finais DROP COLUMN svg_assinatura_responsavel;
            ALTER TABLE sinistro.laudos_finais DROP COLUMN ds_tipo_responsavel;
            ALTER TABLE sinistro.laudos_finais DROP COLUMN cpf_responsavel;
            ALTER TABLE sinistro.laudos_finais DROP COLUMN ds_responsavel;
            ALTER TABLE sinistro.laudos_finais_itens_segurados DROP COLUMN fl_assinado;
            ALTER TABLE sinistro.laudos_finais_itens_segurados DROP COLUMN id_status;
            ALTER TABLE sinistro.motivos_quadra_nao_vistoriada DROP COLUMN id_status;

            DELETE FROM sinistro.motivos_quadra_nao_vistoriada WHERE id = 13;
            
            UPDATE sistema.status SET ds_status = 'Pendente de Laudo' WHERE id = 211;
            UPDATE sistema.status SET ds_status = 'Pendente Envio' WHERE id = 109;
            UPDATE sistema.status SET ds_status = 'Enviada' WHERE id = 110;
            UPDATE sistema.status SET ds_status = 'Cancelado' WHERE id = 207;

            INSERT INTO sistema.status (id_usuario_criacao, dt_criacao, id, ds_status, cd_status, ds_chave, id_tipo_status)
                VALUES('1009', '2015-08-06 15:52:29-03', 209, 'Cancelado por culpa do Segurado', 6, 'CANCELADO_CULPA_SEGURADO', 7);
SQL
        );
    }
}