<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class Task2312051815 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute(<<<SQL
CREATE TABLE produto.produtos_habilitacoes_municipios (
    id SERIAL NOT NULL,
    id_produtos_habilitacoes INTEGER NOT NULL,
    id_municipio INTEGER NOT NULL,

    CONSTRAINT pk_produtos_habilitacoes_municipios PRIMARY KEY (id),
    CONSTRAINT fk_produtos_habilitacoes_municipios_produtos_habilitacoes FOREIGN KEY (id_produtos_habilitacoes) REFERENCES produto.produtos_habilitacoes (id),
    CONSTRAINT fk_produtos_habilitacoes_municipios_municipio FOREIGN KEY (id_municipio) REFERENCES sistema.municipios (id)
) INHERITS (public.campos_default);

CREATE INDEX idx_produtos_habilitacoes_municipios_habilitacoes ON produto.produtos_habilitacoes_municipios(id_produtos_habilitacoes);
CREATE INDEX idx_produtos_habilitacoes_municipios_municipio ON produto.produtos_habilitacoes_municipios(id_municipio);

INSERT INTO produto.produtos_habilitacoes_municipios (id_usuario_criacao, dt_criacao, id_produtos_habilitacoes, id_municipio)
     SELECT 2068 as id_usuario_criacao
            , now() as dt_criacao
            , pph.id as id_produtos_habilitacoes
            , sm.id as id_municipio
       FROM produto.produtos_habilitacoes pph
            INNER JOIN sistema.municipios sm ON sm.id_estado = pph.id_estado
            INNER JOIN produto.produtos pp ON pp.id = pph.id_produto
      WHERE pp.id_safra >= 25;

ALTER TABLE produto.produtos_habilitacoes DROP COLUMN id_municipio;
SQL
);
    }

    public function down(): void
    {
        $this->execute(<<<SQL
DROP TABLE produto.produtos_habilitacoes_municipios;
ALTER TABLE produto.produtos_habilitacoes ADD COLUMN id_municipio INTEGER;
SQL
);
    }
}
