<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class Task2401111514 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute(<<<SQL
            INSERT INTO
                sistema.acao (
                    ds_label,
                    ds_module,
                    ds_controller,
                    ds_action,
                    ds_param,
                    id_parent,
                    ds_image,
                    ds_descricao,
                    fl_tipo,
                    dt_criacao,
                    id_usuario_criacao,
                    id
                )
            VALUES
                (
                    'Propriedade',
                    'comercializacao',
                    'taxacar',
                    'index',
                    '',
                    58,
                    '',
                    'Taxas Propriedade',
                    'M',
                    '2024-02-01 15:22:13',
                    2068,
                    nextval('sistema.acao_id_seq' :: regclass)
                ); 
SQL);

        $rsAcaoPai = $this->fetchRow("SELECT currval('sistema.acao_id_seq') as id");
        $idAcaoPai = $rsAcaoPai['id'];

        $this->execute(<<<SQL
            -- Atualiza ordem dos menus
            
            UPDATE sistema.acao SET nr_ordem = 1345 WHERE ds_module = 'comercializacao' AND ds_controller = 'taxaorcamento' AND id_parent = 58;
            UPDATE sistema.acao SET nr_ordem = 1262 WHERE ds_module = 'comercializacao' AND ds_controller = 'taxacar' AND id_parent = 58;
            UPDATE sistema.acao SET nr_ordem = 1261 WHERE ds_module = 'comercializacao' AND ds_controller = 'taxaproponente' AND id_parent = 58;

            -- Ativar/Desativar
            INSERT INTO
                sistema.acao (
                    ds_label,
                    ds_module,
                    ds_controller,
                    ds_action,
                    ds_param,
                    id_parent,
                    ds_image,
                    ds_descricao,
                    fl_tipo,
                    dt_criacao,
                    id_usuario_criacao,
                    id
                )
            VALUES
                (
                    'Ativar/Desativar',
                    'comercializacao',
                    'taxacar',
                    'activate',
                    'id',
                    $idAcaoPai,
                    'active.png',
                    '',
                    'L',
                    '2024-02-01 15:28:00',
                    2068,
                    nextval('sistema.acao_id_seq' :: regclass)
                );

            -- Relacionar Valores
            INSERT INTO
                sistema.acao (
                    ds_label,
                    ds_module,
                    ds_controller,
                    ds_action,
                    ds_param,
                    id_parent,
                    ds_image,
                    ds_descricao,
                    fl_tipo,
                    dt_criacao,
                    id_usuario_criacao,
                    id
                )
            VALUES
                (
                    'Relacionar Valores',
                    'comercializacao',
                    'taxavalor',
                    'index',
                    'id',
                    $idAcaoPai,
                    'relaciona_taxa.png',
                    'Relacionar Valores',
                    'L',
                    '2024-02-01 16:26:45',
                    2068,
                    nextval('sistema.acao_id_seq' :: regclass)
                );
            
            -- Deletar
            INSERT INTO
                sistema.acao (
                    ds_label,
                    ds_module,
                    ds_controller,
                    ds_action,
                    ds_param,
                    id_parent,
                    ds_image,
                    ds_descricao,
                    fl_tipo,
                    dt_criacao,
                    id_usuario_criacao,
                    id
                )
            VALUES
                (
                    'Deletar',
                    'comercializacao',
                    'taxacar',
                    'delete',
                    'id',
                    $idAcaoPai,
                    'delete.png',
                    'Deletar',
                    'L',
                    '2024-02-01 16:35:36',
                    2068,
                    nextval('sistema.acao_id_seq' :: regclass)
                );

                -- Editar
                INSERT INTO
                    sistema.acao (
                        ds_label,
                        ds_module,
                        ds_controller,
                        ds_action,
                        ds_param,
                        id_parent,
                        ds_image,
                        ds_descricao,
                        fl_tipo,
                        dt_criacao,
                        id_usuario_criacao,
                        id
                    )
                VALUES
                    (
                        'Editar',
                        'comercializacao',
                        'taxacar',
                        'form',
                        'id',
                        $idAcaoPai,
                        'edit.png',
                        '',
                        'L',
                        '2024-02-05 09:27:17',
                        2068,
                        nextval('sistema.acao_id_seq' :: regclass)
                    );

                -- Relacionar Propriedades
                INSERT INTO
                    sistema.acao (
                        ds_label,
                        ds_module,
                        ds_controller,
                        ds_action,
                        ds_param,
                        id_parent,
                        ds_image,
                        ds_descricao,
                        fl_tipo,
                        dt_criacao,
                        id_usuario_criacao,
                        id
                    )
                VALUES
                    (
                        'Relacionar Propriedades',
                        'comercializacao',
                        'taxacar',
                        'relacionacar',
                        'id',
                        (SELECT 
                            id
                        FROM 
                            sistema.acao
                        WHERE 
                            ds_controller = 'taxacar' 
                            AND ds_module = 'comercializacao'
                            AND ds_action = 'index'),
                        'relaciona_propriedade.png',
                        '',
                        'L',
                        NOW(),
                        2068,
                        nextval('sistema.acao_id_seq' :: regclass)
                    );

                -- Importar Taxas por Propriedades
                INSERT INTO
                    sistema.acao (
                        ds_label,
                        ds_module,
                        ds_controller,
                        ds_action,
                        ds_param,
                        id_parent,
                        ds_image,
                        ds_descricao,
                        fl_tipo,
                        dt_criacao,
                        id_usuario_criacao,
                        id
                    )
                VALUES
                    (
                        'Importar Taxas por Propriedades',
                        'produto',
                        'rotinas',
                        'importartaxacar',
                        '',
                        1032,
                        '',
                        'Importar Taxas por Propriedades',
                        'M',
                        '2024-02-07 07:54:38',
                        2068,
                        nextval('sistema.acao_id_seq' :: regclass)
                    );

                INSERT INTO
                    sistema.acao (
                        ds_label,
                        ds_module,
                        ds_controller,
                        ds_action,
                        ds_param,
                        id_parent,
                        ds_image,
                        ds_descricao,
                        fl_tipo,
                        dt_criacao,
                        id_usuario_criacao,
                        id
                    )
                VALUES
                    (
                        'taxascar',
                        'produto',
                        'rotinas',
                        'taxascar',
                        '',
                        1032,
                        '',
                        'taxascar',
                        'A',
                        '2024-02-07 07:54:38',
                        2068,
                        nextval('sistema.acao_id_seq' :: regclass)
                    );

                    CREATE TABLE comercializacao.taxas_agrupamento_car (
                        id SERIAL,
                        id_taxa_agrupamento INTEGER NOT NULL,
                        ds_car VARCHAR(60) NOT NULL,
                        vl_produtividade_esperada NUMERIC(7,3),
                        CONSTRAINT pk_taxas_agrupamento_car PRIMARY KEY (id),
                        CONSTRAINT fk_taxas_agrupamento_car_taxas_agrupamento FOREIGN KEY (id_taxa_agrupamento) REFERENCES comercializacao.taxas_agrupamento (id)
                    ) INHERITS (campos_default);
SQL
);
    }

    public function down(): void
    {
        $this->execute(<<<SQL
            DELETE FROM sistema.acao WHERE id_parent = (SELECT id_parent FROM sistema.acao WHERE ds_action = 'activate' AND ds_controller = 'taxacar');

            DELETE FROM sistema.acao WHERE id = (
                SELECT 
                    id
                FROM 
                    sistema.acao
                WHERE 
                    ds_controller = 'rotinas' 
                    AND ds_module = 'produto'
                    AND ds_action = 'importartaxacar'
            );

            DELETE FROM sistema.acao WHERE id = (
                SELECT 
                    id
                FROM 
                    sistema.acao
                WHERE 
                    ds_controller = 'rotinas' 
                    AND ds_module = 'produto'
                    AND ds_action = 'taxascar'
            );

            DELETE FROM sistema.acao WHERE id = (
                SELECT 
                    id
                FROM 
                    sistema.acao
                WHERE 
                    ds_controller = 'taxacar' 
                    AND ds_module = 'comercializacao'
                    AND ds_action = 'index'
            );

            DROP TABLE comercializacao.taxas_agrupamento_car;
SQL
);
    }
}
