<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class Task2201071246 extends AbstractMigration
{
    public function up(): void
    {
        $this->upNovasColunas();
        $this->upNovaTabela();
    }

    private function upNovasColunas()
    {
        $this->execute(<<<SQL
ALTER TABLE sistema.informacoes_bancarias ADD CONSTRAINT ckc_tipo_conta CHECK(ds_tipo_conta = ANY (ARRAY['C'::bpchar, 'P'::bpchar, 'O'::bpchar]));
ALTER TABLE seguro.propostas_beneficiarios ADD COLUMN fl_favorecido_autorizacao_credito BOOLEAN DEFAULT false;
SQL
        );
    }

    private function upNovaTabela()
    {
        $this->execute(<<<SQL
CREATE TABLE seguro.informacoes_bancarias_propostas(
  id SERIAL NOT NULL,
  id_informacoes_bancarias INTEGER NOT NULL,
  id_proposta INTEGER NOT NULL,
  fl_titular_conta BOOLEAN NOT NULL,
  CONSTRAINT pk_informacoes_bancarias_propostas PRIMARY KEY (id),
  CONSTRAINT fk_pk_informacoes_bancarias_propostas_informacoes_bancarias FOREIGN KEY (id_informacoes_bancarias) REFERENCES sistema.informacoes_bancarias (id),
  CONSTRAINT fk_pk_informacoes_bancarias_propostas_proposta FOREIGN KEY (id_proposta) REFERENCES seguro.propostas (id)
) INHERITS (public.campos_default);
SQL
        );
    }

    public function down(): void
    {
        $this->downNovasColunas();
        $this->downNovaTabela();
    }

    private function downNovasColunas()
    {
        $this->execute(<<<SQL
ALTER TABLE sistema.informacoes_bancarias DROP CONSTRAINT ckc_tipo_conta;
ALTER TABLE seguro.propostas_beneficiarios DROP COLUMN fl_favorecido_autorizacao_credito;
SQL
        );
    }

    private function downNovaTabela()
    {
        $this->execute(<<<SQL
DROP TABLE seguro.informacoes_bancarias_propostas;
SQL
        );
    }
}
