-- +goose Up
-- +goose StatementBegin

-- =========================================
-- ENUM: moderator_action_type - Типы действий модератора
-- =========================================
CREATE TYPE moderator_action_type AS ENUM (
    'approve_request',      -- Одобрение заявки
    'reject_request',       -- Отклонение заявки
    'block_user',           -- Блокировка пользователя
    'unblock_user',         -- Разблокировка пользователя
    'resolve_complaint',    -- Разрешение жалобы
    'reject_complaint',     -- Отклонение жалобы
    'edit_request',         -- Редактирование заявки
    'delete_request'        -- Удаление заявки
);

COMMENT ON TYPE moderator_action_type IS 'Типы действий модераторов для аудита';

-- =========================================
-- ТАБЛИЦА: moderator_actions - Логи действий модераторов
-- =========================================
CREATE TABLE moderator_actions (
    id BIGSERIAL PRIMARY KEY,

    -- Модератор
    moderator_id BIGINT NOT NULL REFERENCES users(id),
    action_type moderator_action_type NOT NULL,

    -- Целевые объекты (опционально, зависит от типа действия)
    target_user_id BIGINT REFERENCES users(id),
    target_request_id BIGINT REFERENCES requests(id),
    target_complaint_id BIGINT REFERENCES complaints(id),

    -- Детали действия
    comment TEXT,
    metadata JSONB,  -- Дополнительные данные в формате JSON

    -- Аудит
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

-- Комментарии
COMMENT ON TABLE moderator_actions IS 'Полный аудит всех действий модераторов в системе';
COMMENT ON COLUMN moderator_actions.metadata IS 'Дополнительные данные в JSON (изменённые поля, причины и т.д.)';

-- Индексы
CREATE INDEX idx_moderator_actions_moderator_id ON moderator_actions(moderator_id);
CREATE INDEX idx_moderator_actions_action_type ON moderator_actions(action_type);
CREATE INDEX idx_moderator_actions_created_at ON moderator_actions(created_at DESC);
CREATE INDEX idx_moderator_actions_target_user_id ON moderator_actions(target_user_id) WHERE target_user_id IS NOT NULL;
CREATE INDEX idx_moderator_actions_target_request_id ON moderator_actions(target_request_id) WHERE target_request_id IS NOT NULL;

-- +goose StatementEnd

-- +goose Down
-- +goose StatementBegin
DROP TABLE IF EXISTS moderator_actions CASCADE;
DROP TYPE IF EXISTS moderator_action_type CASCADE;
-- +goose StatementEnd
