<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class Task2012111332 extends AbstractMigration
{
    public function up(): void
    {
    	$this->execute("ALTER TABLE atendimento.chamados ADD COLUMN dt_prazo_retorno DATE");
    	$this->upAlterViewChamados();
    }

    public function down(): void
    {
    	$this->downAlterViewChamados();
		$this->execute("ALTER TABLE atendimento.chamados DROP COLUMN dt_prazo_retorno");
    }

    private function upAlterViewChamados()
    {
    	$this->execute(<<<SQL
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
   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
    	);
    }

    private function downAlterViewChamados()
    {
    	$this->execute(<<<SQL
DROP VIEW atendimento.v_chamados;

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
   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
    	);
    }
}
