DO $$
DECLARE
	_path  character varying(256) := 'patch-2026_02_02-AccessPoliciesAndMenuTails';
	_build integer := 16045;
BEGIN
	IF EXISTS (SELECT 1 FROM public."Versions" WHERE "Path" = _path) THEN
		RETURN;
	END IF;

	IF EXISTS (SELECT 1 FROM public."Versions" WHERE "Build" >= _build) THEN
		RETURN;
	END IF;

	BEGIN
        -- Скрипт создания таблицы политик доступа
        CREATE TABLE IF NOT EXISTS public."AccessPolicies"
        (
            "Id"                    bigserial primary key   NOT NULL, -- Идентификатор
            "Name"                  character varying(500)  NOT NULL, -- Название
            "Description"           character varying(4000) NULL,     -- Описание (опционально)  
            "CustomerId"            bigint                  NOT NULL, -- Идентификатор организации
            "AccessPolicyRulesJson" text                    not null, -- Запреты

            -- Проверка на уникальность очереди
            CONSTRAINT "AccessPolicies_pk" UNIQUE ("Name")
        );

        -- Скрипт создания таблицы, хранящей связь многие-ко-многим политик и добавленных сущностей политик
        CREATE TABLE IF NOT EXISTS public."AccessPoliciesMembers"
        (
            "PolicyId"   bigint not null, -- Идентификатор политики
            "EntityId"   bigint not null, -- Идентификатор сущности
            "EntityType" int    not null, -- enum EntityTypes

            primary key ("PolicyId", "EntityId", "EntityType")
        );


        -- Скрипт создания таблицы плиток меню пользователей
        CREATE TABLE IF NOT EXISTS public."MenuTails"
        (
            "Id"         bigserial primary key   NOT NULL,           -- Идентификатор
            "TitlesJson" character varying(4000) NOT NULL,           -- Словарь локали и заголовков
            "Url"        character varying(300)  NULL,               -- Редирект ссылка
            "Module"     int                     NOT NULL DEFAULT 0, -- enum Модуль
            "TailType"   int                     NOT NULL DEFAULT 0, -- enum Тип плитки
            "Order"      int                     NOT NULL,           -- Позиция в списке плиток
            "CustomerId" bigint                  NULL,               -- Организация к которой привязана плитка
            "IconFileId" bigint                  NULL,               -- Идентификатор файла кастомной иконки плитки

            -- Проверка на уникальность очереди
            CONSTRAINT "customerId_order_unique" UNIQUE ("CustomerId", "Order")
        );

        -- Инициализация базовых плиток меню
        -- Инициализация настроек для почты
        INSERT INTO public."MenuTails" (
            "Id",
            "TitlesJson",
            "Module",
            "TailType",
            "Order"
        )
        VALUES (
           -1, -- В соответствии с Module
           '{ "ru":"Почта","en":"Mail" }',
           1,
           0,
           1
       ) ON CONFLICT DO NOTHING;

        -- Инициализация настроек для календаря
        INSERT INTO public."MenuTails" (
            "Id",
            "TitlesJson",
            "Module",
            "TailType",
            "Order"
        )
        VALUES (
           -2, -- В соответствии с Module
           '{ "ru":"Календарь","en":"Calendar" }',
           2,
           0,
           2
       ) ON CONFLICT DO NOTHING;

        -- Инициализация настроек для диска
        INSERT INTO public."MenuTails" (
            "Id",
            "TitlesJson",
            "Module",
            "TailType",
            "Order"
        )
        VALUES (
           -3, -- В соответствии с Module
           '{ "ru":"Диск","en":"Disk" }',
           3,
           0,
           3
       ) ON CONFLICT DO NOTHING;

        -- Инициализация настроек для админки
        INSERT INTO public."MenuTails" (
            "Id",
            "TitlesJson",
            "Module",
            "TailType",
            "Order"
        )
        VALUES (
           -4, -- В соответствии с Module
           '{"ru":"Админ","en":"Admin" }',
           4,
           0,
           4
       ) ON CONFLICT DO NOTHING;

        -- Инициализация настроек для графики
        INSERT INTO public."MenuTails" (
            "Id",
            "TitlesJson",
            "Module",
            "TailType",
            "Order"
        )
        VALUES (
           -5, -- В соответствии с Module
           '{ "ru":"Графика","en":"Draw" }',
           5,
           0,
           5
       ) ON CONFLICT DO NOTHING;

        -- Инициализация настроек для платежей
        INSERT INTO public."MenuTails" (
            "Id",
            "TitlesJson",
            "Module",
            "TailType",
            "Order"
        )
        VALUES (
           -7, -- В соответствии с Module
           '{ "ru":"Платежи","en":"Payments" }',
           7,
           0,
           7
       ) ON CONFLICT DO NOTHING;

        -- Инициализация настроек для контактов
        INSERT INTO public."MenuTails" (
            "Id",
            "TitlesJson",
            "Module",
            "TailType",
            "Order"
        )
        VALUES (
           -8, -- В соответствии с Module
           '{ "ru":"Контакты","en":"Contacts" }',
           8,
           0,
           8
       ) ON CONFLICT DO NOTHING;

        -- Инициализация настроек для команд
        INSERT INTO public."MenuTails" (
            "Id",
            "TitlesJson",
            "Module",
            "TailType",
            "Order"
        )
        VALUES (
           -9, -- В соответствии с Module
           '{ "ru":"Команды","en":"Team" }',
           9,
           0,
           9
       ) ON CONFLICT DO NOTHING;

        -- Инициализация настроек для проектов
        INSERT INTO public."MenuTails" (
            "Id",
            "TitlesJson",
            "Module",
            "TailType",
            "Order"
        )
        VALUES (
           -10, -- В соответствии с Module
           '{ "ru":"Проекты","en":"Projects" }',
           10,
           0,
           10
       ) ON CONFLICT DO NOTHING;

        -- Инициализация настроек для страниц
        INSERT INTO public."MenuTails" (
            "Id",
            "TitlesJson",
            "Module",
            "TailType",
            "Order"
        )
        VALUES (
           -11, -- В соответствии с Module
           '{ "ru":"Страницы","en":"Pages" }',
           11,
           0,
           11
       ) ON CONFLICT DO NOTHING;

        -- Инициализация настроек для форм
        INSERT INTO public."MenuTails" (
            "Id",
            "TitlesJson",
            "Module",
            "TailType",
            "Order"
        )
        VALUES (
            -12, -- В соответствии с Module
            '{ "ru":"Формы","en":"Forms" }',
            12,
            0,
            12
        ) ON CONFLICT DO NOTHING;

	EXCEPTION
		WHEN OTHERS THEN
			RAISE NOTICE '[ERR] %: %', _path, SQLERRM;
	END;
END;
$$;
