<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class Task2102191348 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute("
            CREATE TABLE seguro.propostas_indice_producao_forrageira (
                id SERIAL,
                id_proposta INTEGER NOT NULL,
                ano SMALLINT NOT NULL,
                indice DOUBLE PRECISION NOT NULL,
                indice_esperado DOUBLE PRECISION NOT NULL,
                fl_status BOOLEAN NOT NULL,

                CONSTRAINT pk_propostas_indice_producao_forrageira PRIMARY KEY (id),
                CONSTRAINT fk_propostas_indice_producao_forrageira_proposta FOREIGN KEY (id_proposta)
                    REFERENCES seguro.propostas (id)
            ) 
            INHERITS 
                (public.campos_default)
            WITH
                (OIDS = false)
        ");

        $this->execute("ALTER TABLE seguro.itens_segurados_complemento add COLUMN ds_paf character varying(100)");

        $this->execute("
                        CREATE OR REPLACE VIEW seguro.v_unidades_seguradas
                            AS
                            SELECT i.id,
                                to_char((ic.dt_final_colheita)::timestamp with time zone, 'DD/MM/YYYY'::text) AS is_dt_final_colheita,
                                to_char((ic.dt_inicio_colheita)::timestamp with time zone, 'DD/MM/YYYY'::text) AS is_dt_inicio_colheita,
                                i.id_proposta,
                                i.vl_area AS is_area,
                                i.nr_item_segurado AS is_item,
                                i.ds_item_segurado AS is_descricao_item,
                                i.vl_idade AS is_idade,
                                i.ds_espacamento AS is_espacamento_simples,
                                i.nr_plantas AS is_nro_plantas,
                                i.vl_producao_planta AS is_producao_planta,
                                i.vl_valor_tonelada AS is_valor_tonelada,
                                i.vl_valor_custeio AS is_valor_custeio,
                                i.vl_rendimento_tonelada AS is_produtividade,
                                i.vl_lmga AS is_lmga_parcial,
                                v.ds_nome_variedade AS is_nome_variedades,
                                v.id AS is_variedades,
                                pe.ds_nome_portaenxerto AS is_nome_portaenxerto,
                                pe.id AS is_portaenxerto,
                                ic.id_ciclo AS is_ciclo_variedade,
                                ic.ds_tipo_conducao AS is_tipo_conducao,
                                to_char((ic.dt_plantio)::timestamp with time zone, 'dd/mm/yyyy'::text) AS is_data_plantio_transplante,
                                to_char((ic.dt_semeadura)::timestamp with time zone, 'dd/mm/yyyy'::text) AS is_data_semeadura,
                                to_char((ic.dt_poda)::timestamp with time zone, 'dd/mm/yyyy'::text) AS is_data_poda,
                                ic.nr_plantas_metro_linear AS is_nro_plantas_m_linear,
                                ic.vl_producao_minima AS is_producao_minima,
                                ic.vl_lmi_pos_granizo AS is_lmi_pos_granizo,
                                ic.vl_producao_garantida AS is_producao_garantida,
                                ic.vl_idade_tela AS is_idade_tela,
                                ic.ds_local AS is_local,
                                ic.ds_coordenadas_geograficas AS is_coordenadas_geograficas,
                                ic.ds_primeiro_ano_plantio AS is_primeiro_ano_plantio,
                                ic.vl_altitude AS is_altitude,
                                ic.id_tipo_solo AS is_tipo_solo,
                                    CASE
                                        WHEN (ic.id_sistema_plantio = 1) THEN 'Direto'::text
                                        WHEN (ic.id_sistema_plantio = 2) THEN 'Convencional'::text
                                        WHEN (ic.id_sistema_plantio = 3) THEN 'A Lanço'::text
                                        ELSE NULL::text
                                    END AS is_sistema_plantio,
                                ic.id_sistema_plantio AS is_id_sistema_plantio,
                                cic.ds_nome_ciclo AS is_ciclo,
                                v.cd_variedade_seguradora,
                                cic.cd_ciclo_seguradora,
                                ic.ds_paf as is_pequena_area_forrageira
                            FROM ((((seguro.itens_segurados i
                                JOIN produto.variedades v ON ((i.id_variedade = v.id)))
                                JOIN seguro.itens_segurados_complemento ic ON ((i.id = ic.id_item_segurado)))
                                JOIN produto.ciclos cic ON ((ic.id_ciclo = cic.id)))
                                LEFT JOIN produto.portaenxertos pe ON ((ic.id_portaenxerto = pe.id)))
                            ORDER BY i.nr_item_segurado
        ");

        $this->execute("DROP VIEW produto.v_atributos");
 
        $this->execute("alter table produto.atributos_rn alter column ds_valores_opcoes type character varying(1000)");
 
        $this->execute("
            CREATE OR REPLACE VIEW produto.v_atributos
                AS
                SELECT a.id_usuario_criacao,
                    a.id_usuario_alteracao,
                    a.dt_criacao,
                    a.fl_required,
                    a.dt_alteracao,
                    a.fl_ativo,
                    a.fl_del,
                    a.id,
                    a.id_atributo_modulo,
                    a.ds_chave_rn,
                    a.ds_descricao_atributo,
                    a.fl_permite_exclusao,
                    a.id_tipo_atributo,
                    a.ds_valores_opcoes,
                    a.ds_ordem,
                    a.id_parent,
                    a.ds_parent_value,
                    a.ds_schema,
                    a.ds_table,
                    a.ds_option_value,
                    a.ds_option_text,
                    a.ds_option_filter,
                    a.ds_validar_campo,
                    a.ds_validar_campo_valor,
                    m.ds_chave_atributo_modulo,
                    m.ds_descricao_atributo_modulo,
                    t.ds_chave_tipo_atributo,
                    t.ds_descricao_tipo_atributo
                FROM ((produto.atributos_rn a
                    JOIN produto.atributos_modulos m ON ((a.id_atributo_modulo = m.id)))
                    JOIN produto.tipo_atributo t ON ((a.id_tipo_atributo = t.id)))
                WHERE ((m.fl_ativo = true) AND (t.fl_ativo = true))
            ");

        
    }

    public function down(): void
    {
        $this->execute("DROP TABLE seguro.propostas_indice_producao_forrageira");
    }
}
