<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class Task2309081618 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute(<<<SQL
ALTER TABLE sistema.aviso_tela_inicial ALTER COLUMN ds_arquivo TYPE VARCHAR(100)
                                      ,ALTER COLUMN ds_descricao TYPE VARCHAR(70)
                                      ,ALTER COLUMN ds_titulo TYPE VARCHAR(50)
                                      ,ALTER COLUMN ds_texto TYPE VARCHAR(600)
                                      ,ALTER COLUMN ds_arquivo DROP NOT NULL
                                      ,ALTER COLUMN fl_ativo SET DEFAULT false
                                      ,ADD COLUMN fl_link BOOL DEFAULT false NOT NULL;

CREATE TABLE sistema.aviso_tela_inicial_tipo_usuario (
          id SERIAL,
          id_aviso_tela_inicial INT NOT NULL,
          tp_usuario CHAR(1) NOT NULL,
          CONSTRAINT pk_aviso_tela_inicial_tipo_usuario PRIMARY KEY(id),
          CONSTRAINT fk_aviso_tela_inicial_aviso FOREIGN KEY(id_aviso_tela_inicial) REFERENCES sistema.aviso_tela_inicial(id),
          CONSTRAINT ckc_tipo_usuario CHECK (tp_usuario = ANY (ARRAY['F'::bpchar, 'C'::bpchar, 'P'::bpchar, 'T'::bpchar, 'V'::bpchar, 'A'::bpchar, 'M'::bpchar, 'H'::bpchar]))
        ) INHERITS (public.campos_default);

CREATE TABLE sistema.aviso_tela_inicial_usuario_leitura (
          id SERIAL,
          id_aviso_tela_inicial INT NOT NULL,
          id_usuario INT NOT NULL,
          fl_lido BOOLEAN NOT NULL DEFAULT false,
          CONSTRAINT pk_aviso_tela_inicial_usuario_leitura PRIMARY KEY(id),
          CONSTRAINT fk_aviso_tela_inicial_aviso FOREIGN KEY(id_aviso_tela_inicial) REFERENCES sistema.aviso_tela_inicial(id),
          CONSTRAINT fk_aviso_tela_inicial_usuario FOREIGN KEY(id_usuario) REFERENCES sistema.usuarios(id)
        ) INHERITS (public.campos_default);
SQL
        );
    }

    public function down(): void
    {
        $this->execute(<<<SQL
ALTER TABLE sistema.aviso_tela_inicial ALTER COLUMN ds_arquivo SET NOT NULL
                                      ,ALTER COLUMN fl_ativo SET DEFAULT true
                                      ,DROP COLUMN fl_link;
DROP TABLE sistema.aviso_tela_inicial_usuario_leitura;
DROP TABLE sistema.aviso_tela_inicial_tipo_usuario;
SQL
        );
    }
}
