-- Включение расширений PostgreSQL
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS "pg_trgm";  -- для поиска по шаблону
CREATE EXTENSION IF NOT EXISTS "btree_gin"; -- для составных индексов

-- Создание кастомных индексов для JSONB
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_submissions_email
ON submissions ((data->>'email')) WHERE data ? 'email';

-- Функция для валидации JSONB схемы
CREATE OR REPLACE FUNCTION validate_submission_data()
RETURNS trigger AS $$
BEGIN
    -- Проверяем, что data не пустой
    IF NEW.data IS NULL OR NEW.data = '{}'::jsonb THEN
        RAISE EXCEPTION 'Submission data cannot be empty';
    END IF;

    -- Проверяем, что все обязательные поля присутствуют
    IF NEW.form_id IS NOT NULL THEN
        -- Дополнительная валидация через триггер
    END IF;

    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER validate_submission
    BEFORE INSERT OR UPDATE ON submissions
    FOR EACH ROW
    EXECUTE FUNCTION validate_submission_data();