<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class Task2208021300 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute(<<<SQL
ALTER TABLE sistema.empresas ADD COLUMN id_codigo_ibge integer;
ALTER TABLE sistema.funcionarios ADD COLUMN fl_agronomo BOOL default false;

UPDATE sistema.tipo_arquivo_empresa SET fl_ativo = 'f' WHERE id in(6, 7, 10, 12);
UPDATE sistema.funcionarios SET fl_agronomo = 't' WHERE id in(405, 1106, 1150, 1151, 1285);

INSERT INTO sistema.tipo_arquivo_empresa (ds_tipo_arquivo, ds_chave_tipo_arquivo) 
     VALUES ('FICHA DE CADASTRO ESSOR', 'FICHA_CADASTRO_ESSOR'),
            ('FICHA DE CADASTRO AGROBRASIL', 'FICHA_CADASTRO_AGROBRASIL');

CREATE TABLE sistema.empresas_agronomos (
    id SERIAL,
    id_empresa INTEGER NOT NULL,
    id_funcionario INTEGER NOT NULL,
    CONSTRAINT pk_empresas_agronomos PRIMARY KEY (id),
    CONSTRAINT fk_empresas_agronomos_empresas FOREIGN KEY (id_empresa) REFERENCES sistema.empresas (id),
    CONSTRAINT fk_empresas_agronomos_funcionarios FOREIGN KEY (id_funcionario) REFERENCES sistema.funcionarios (id)
) INHERITS (public.campos_default);

INSERT INTO sistema.empresas_agronomos
     SELECT 3379,
            null,
            now(),
            null,
            true,
            false,
            nextval('sistema.empresas_agronomos_id_seq'::regclass),
            se.id,
            405
       FROM sistema.empresas se
            INNER JOIN sistema.municipios sm ON sm.id = se.id_municipio
            INNER JOIN sistema.empresas_grupamento_culturas segc ON segc.id_empresa = se.id
      WHERE sm.id_estado in (21, 24)
        AND segc.id_grupamento_cultura = 4;

INSERT INTO sistema.empresas_agronomos
     SELECT 3379,
            null,
            now(),
            null,
            true,
            false,
            nextval('sistema.empresas_agronomos_id_seq'::regclass),
            se.id,
            1106
       FROM sistema.empresas se
            INNER JOIN sistema.municipios sm ON sm.id = se.id_municipio
            INNER JOIN sistema.empresas_grupamento_culturas segc ON segc.id_empresa = se.id
      WHERE sm.id_estado = 21
        AND segc.id_grupamento_cultura = 5;

INSERT INTO sistema.empresas_agronomos
     SELECT 3379,
            null,
            now(),
            null,
            true,
            false,
            nextval('sistema.empresas_agronomos_id_seq'::regclass),
            se.id,
            1106
       FROM sistema.empresas se
            INNER JOIN sistema.municipios sm ON sm.id = se.id_municipio
            INNER JOIN sistema.empresas_grupamento_culturas segc ON segc.id_empresa = se.id
      WHERE sm.id_estado = 24
        AND segc.id_grupamento_cultura in(4, 5);

INSERT INTO sistema.empresas_agronomos
     SELECT 3379,
            null,
            now(),
            null,
            true,
            false,
            nextval('sistema.empresas_agronomos_id_seq'::regclass),
            se.id,
            1285
       FROM sistema.empresas se
            INNER JOIN sistema.municipios sm ON sm.id = se.id_municipio
      WHERE sm.id_estado in(12, 16);

INSERT INTO sistema.empresas_agronomos
     SELECT 3379,
            null,
            now(),
            null,
            true,
            false,
            nextval('sistema.empresas_agronomos_id_seq'::regclass),
            se.id,
            1151
       FROM sistema.empresas se
            INNER JOIN sistema.municipios sm ON sm.id = se.id_municipio
      WHERE sm.id_estado in(13, 25);

INSERT INTO sistema.empresas_agronomos
     SELECT 3379,
            null,
            now(),
            null,
            true,
            false,
            nextval('sistema.empresas_agronomos_id_seq'::regclass),
            se.id,
            1150
       FROM sistema.empresas se
            INNER JOIN sistema.municipios sm ON sm.id = se.id_municipio
      WHERE sm.id_estado not in(12, 13, 16, 21, 24, 25);
SQL
);
    }

    public function down(): void
    {
        $this->execute(<<<SQL
ALTER TABLE sistema.empresas DROP COLUMN id_codigo_ibge;
ALTER TABLE sistema.funcionarios DROP COLUMN fl_agronomo;

UPDATE sistema.tipo_arquivo_empresa SET fl_ativo = 't' WHERE id in(6, 7, 10, 12);

DELETE FROM sistema.tipo_arquivo_empresa WHERE ds_chave_tipo_arquivo in('FICHA_CADASTRO_ESSOR', 'FICHA_CADASTRO_AGROBRASIL');

DROP TABLE sistema.empresas_agronomos;
SQL
);
    }
}
