<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class TaskSr50661 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute(<<<SQL
        ALTER TABLE atendimento.tipo_chamado ADD COLUMN prazo_dias_uteis INTEGER NULL DEFAULT NULL;
        ALTER TABLE atendimento.tipo_chamado ADD COLUMN ds_identificacao_tipo_chamado TEXT NULL DEFAULT NULL;
        ALTER TABLE atendimento.chamados ADD COLUMN dt_final_prazo DATE NULL DEFAULT NULL;
        ALTER TABLE atendimento.chamados_logs ADD COLUMN dt_final_prazo DATE NULL DEFAULT NULL;

        CREATE OR REPLACE VIEW atendimento.v_chamados AS
                SELECT DISTINCT c.id,
                    c.id_usuario_criacao,
                    c.id_usuario_alteracao,
                    c.dt_alteracao,
                    c.fl_ativo,
                    c.fl_del,
                    c.id_prioridade,
                    c.id_tipo_chamado,
                    c.id_status,
                    c.id_departamento,
                    c.id_proposta,
                    c.ds_descricao,
                    c.id_parent,
                    c.dt_criacao,
                    c.fl_lido,
                    c.id_responsavel,
                    c.fl_pendencia_agrobrasil,
                    tc.ds_chave AS tipo_chamado,
                    tc.ds_tipo_chamado,
                    p.ds_chave AS prioridade,
                    s.ds_status,
                    d.ds_nome_departamento,
                    u.ds_nome_usuario,
                    u2.ds_nome_usuario AS ds_nome_responsavel,
                    pp.ds_nome_proponente,
                    cd.ds_tipo_destinatario,
                    pr2.id_status AS id_status_proposta,
                    pr2.nr_apolice,
                    pe.id_endosso,
                    prd.id_safra,
                    cd.id_empresa,
                    seguro.nr_endosso(pr2.id, pr2.id_endosso) AS nr_endosso,
                    seguro.id_proposta_mae(pr2.id) AS id_proposta_mae,
                    pr2.id_proposta_endossada,
                    seguro.id_proposta_mae_completo(pr2.id) AS id_proposta_mae_completo,
                    c.dt_agendamento AS prorrogacao_dt_agendamento,
                    c.dt_prazo_agendamento AS prorrogacao_dt_prazo_agendamento,
                    e.id AS id_estado,
                    m.id AS id_municipio,
                    c.dt_prazo_retorno,
                    tc.fl_destinatario_corretor,
                    tc.fl_destinatario_empresa_vistoria,
                    tc.fl_destinatario_seguradora,
                    prd.ds_nome_produto,
                    c.dt_final_prazo
                FROM atendimento.chamados c
                    JOIN atendimento.tipo_chamado tc ON tc.id = c.id_tipo_chamado
                    JOIN atendimento.prioridade p ON p.id = c.id_prioridade
                    JOIN sistema.status s ON s.id = c.id_status
                    JOIN sistema.departamentos d ON d.id = c.id_departamento
                    JOIN sistema.usuarios u ON u.id = c.id_usuario_criacao
                    JOIN seguro.propostas pr2 ON pr2.id = c.id_proposta
                    JOIN seguro.propostas_proponentes pp ON pp.id_proposta = pr2.id
                    JOIN produto.produtos prd ON prd.id = pr2.id_produto
                    JOIN seguro.propostas_propriedades prpro ON prpro.id_proposta = pr2.id
                    JOIN sistema.municipios m ON m.id = prpro.id_municipio
                    JOIN sistema.estados e ON e.id = m.id_estado
                    LEFT JOIN seguro.propostas_endosso pe ON pe.id_proposta = pr2.id
                    LEFT JOIN sistema.usuarios u2 ON c.id_responsavel = u2.id
                    LEFT JOIN atendimento.chamados_destinatario cd ON c.id = cd.id_chamado
                WHERE c.id_parent IS NULL
                ORDER BY c.id, c.dt_criacao DESC;
SQL
        );
    }

    public function down(): void
    {
        $this->execute(<<<SQL
            ALTER TABLE atendimento.tipo_chamado DROP COLUMN prazo_dias_uteis;
            ALTER TABLE atendimento.tipo_chamado DROP COLUMN ds_identificacao_tipo_chamado;
            ALTER TABLE atendimento.chamados DROP COLUMN dt_final_prazo;
            ALTER TABLE atendimento.chamados_logs DROP COLUMN dt_final_prazo;

            CREATE OR REPLACE VIEW atendimento.v_chamados AS
                SELECT DISTINCT c.id,
                    c.id_usuario_criacao,
                    c.id_usuario_alteracao,
                    c.dt_alteracao,
                    c.fl_ativo,
                    c.fl_del,
                    c.id_prioridade,
                    c.id_tipo_chamado,
                    c.id_status,
                    c.id_departamento,
                    c.id_proposta,
                    c.ds_descricao,
                    c.id_parent,
                    c.dt_criacao,
                    c.fl_lido,
                    c.id_responsavel,
                    c.fl_pendencia_agrobrasil,
                    tc.ds_chave AS tipo_chamado,
                    tc.ds_tipo_chamado,
                    p.ds_chave AS prioridade,
                    s.ds_status,
                    d.ds_nome_departamento,
                    u.ds_nome_usuario,
                    u2.ds_nome_usuario AS ds_nome_responsavel,
                    pp.ds_nome_proponente,
                    cd.ds_tipo_destinatario,
                    pr2.id_status AS id_status_proposta,
                    pr2.nr_apolice,
                    pe.id_endosso,
                    prd.id_safra,
                    cd.id_empresa,
                    seguro.nr_endosso(pr2.id, pr2.id_endosso) AS nr_endosso,
                    seguro.id_proposta_mae(pr2.id) AS id_proposta_mae,
                    pr2.id_proposta_endossada,
                    seguro.id_proposta_mae_completo(pr2.id) AS id_proposta_mae_completo,
                    c.dt_agendamento AS prorrogacao_dt_agendamento,
                    c.dt_prazo_agendamento AS prorrogacao_dt_prazo_agendamento,
                    e.id AS id_estado,
                    m.id AS id_municipio,
                    c.dt_prazo_retorno,
                    tc.fl_destinatario_corretor,
                    tc.fl_destinatario_empresa_vistoria,
                    tc.fl_destinatario_seguradora,
                    prd.ds_nome_produto
                FROM atendimento.chamados c
                    JOIN atendimento.tipo_chamado tc ON tc.id = c.id_tipo_chamado
                    JOIN atendimento.prioridade p ON p.id = c.id_prioridade
                    JOIN sistema.status s ON s.id = c.id_status
                    JOIN sistema.departamentos d ON d.id = c.id_departamento
                    JOIN sistema.usuarios u ON u.id = c.id_usuario_criacao
                    JOIN seguro.propostas pr2 ON pr2.id = c.id_proposta
                    JOIN seguro.propostas_proponentes pp ON pp.id_proposta = pr2.id
                    JOIN produto.produtos prd ON prd.id = pr2.id_produto
                    JOIN seguro.propostas_propriedades prpro ON prpro.id_proposta = pr2.id
                    JOIN sistema.municipios m ON m.id = prpro.id_municipio
                    JOIN sistema.estados e ON e.id = m.id_estado
                    LEFT JOIN seguro.propostas_endosso pe ON pe.id_proposta = pr2.id
                    LEFT JOIN sistema.usuarios u2 ON c.id_responsavel = u2.id
                    LEFT JOIN atendimento.chamados_destinatario cd ON c.id = cd.id_chamado
                WHERE c.id_parent IS NULL
                ORDER BY c.id, c.dt_criacao DESC;
SQL
        );
    }
}
