<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class Task03999 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute("INSERT INTO sistema.acao (
                            ds_label, 
                            ds_module, 
                            ds_controller, 
                            ds_action, 
                            ds_param, 
                            id_parent, 
                            ds_image, 
                            ds_descricao, 
                            fl_tipo, 
                            id
                    ) VALUES (
                            'Laudo Preliminar LP004',
                            'regulacao',
                            'lp004',
                            'form',
                            '',
                            1752,
                            '',
                            'Laudo Preliminar LP004',
                            'A',
                            nextval('sistema.acao_id_seq'::regclass)
                    )
        ");

        $this->execute("CREATE TABLE regulacao.lp004 (
                            id_laudo_preliminar integer NOT NULL,
                            ds_aspectos_gerais_cultura text COLLATE pg_catalog.\"default\" NOT NULL,
                            dt_vistoria_final timestamp(6) without time zone,
                            fl_areas_declaradas_conferem boolean NOT NULL,
                            fl_lavoura_condiz_proposta boolean NOT NULL,
                            id serial,
                            dt_prevista_inicio_colheita timestamp without time zone NOT NULL,
                            fl_incidencia_atingida boolean NOT NULL,
                            CONSTRAINT pk_lp004 PRIMARY KEY (id),
                            CONSTRAINT lp004_id_laudo_preliminar_fkey FOREIGN KEY (id_laudo_preliminar)
                                REFERENCES sinistro.laudos_preliminares (id) MATCH SIMPLE
                                ON UPDATE NO ACTION
                                ON DELETE CASCADE
                        )
                            INHERITS (public.campos_default)
                        WITH (
                            OIDS = FALSE
                        )
        ");
        
        $this->execute("CREATE TABLE regulacao.lp004_itens_segurados (
                            id serial,
                            id_laudo_preliminar_item_segurado integer NOT NULL,
                            vl_tamanho_planta integer,
                            vl_danos_nao_cobertos double precision,
                            fl_periodo_cob_qualidade boolean NOT NULL,
                            CONSTRAINT lp004_itens_segurados_pkey PRIMARY KEY (id),
                            CONSTRAINT id_laudo_preliminar_item_segurado FOREIGN KEY (id_laudo_preliminar_item_segurado)
                                REFERENCES sinistro.laudos_preliminares_itens_segurados (id) MATCH SIMPLE
                                ON UPDATE NO ACTION
                                ON DELETE CASCADE
                        )
                            INHERITS (public.campos_default)
                        WITH (
                            OIDS = FALSE
                        )
        ");
    }

    public function down(): void
    {
        $this->execute("DELETE FROM sistema.acao 
                         WHERE ds_module = 'regulacao'
                           AND ds_controller = 'lp004'
                           AND ds_action = 'form'
                           AND id_parent = 1752
        ");

        $this->table("regulacao.lp004")->drop()->save();

        $this->table("regulacao.lp004_itens_segurados")->drop()->save();
    }
}
