-- Исправление триггера create_match_on_mutual_like
-- Дата: 2025-11-06
-- Проблемы: 
--   1. Использовались неправильные имена полей: target_id вместо target_user_id, action вместо type
--   2. Использовались несуществующие колонки в notifications: content и reference_id вместо data

-- Удаляем старую функцию
DROP FUNCTION IF EXISTS create_match_on_mutual_like() CASCADE;

-- Создаем исправленную функцию
CREATE OR REPLACE FUNCTION create_match_on_mutual_like()
RETURNS TRIGGER AS $$
DECLARE
    reverse_like_exists BOOLEAN;
    match_id_var UUID;
BEGIN
    -- Проверяем только лайки и суперлайки (игнорируем pass)
    IF NEW.type != 'like' AND NEW.type != 'superlike' THEN
        RETURN NEW;
    END IF;

    -- Проверяем есть ли обратный лайк (правильные имена полей: target_user_id, type)
    SELECT EXISTS (
        SELECT 1 
        FROM swipes 
        WHERE user_id = NEW.target_user_id 
        AND target_user_id = NEW.user_id 
        AND type IN ('like', 'superlike')
    ) INTO reverse_like_exists;

    -- Если есть взаимный лайк, создаем матч
    IF reverse_like_exists THEN
        -- Создаем матч и получаем его ID
        INSERT INTO matches (user_id_1, user_id_2, created_at, is_active)
        VALUES (
            LEAST(NEW.user_id, NEW.target_user_id),
            GREATEST(NEW.user_id, NEW.target_user_id),
            NOW(),
            true
        )
        ON CONFLICT (user_id_1, user_id_2) DO UPDATE SET is_active = true
        RETURNING id INTO match_id_var;

        -- Создаем уведомления для обоих пользователей
        -- Используем data (jsonb) вместо content и reference_id
        INSERT INTO notifications (user_id, type, data, is_read, created_at)
        VALUES (
            NEW.user_id,
            'new_match',
            jsonb_build_object('message', 'У вас новый матч!', 'match_id', match_id_var),
            false,
            NOW()
        );

        INSERT INTO notifications (user_id, type, data, is_read, created_at)
        VALUES (
            NEW.target_user_id,
            'new_match',
            jsonb_build_object('message', 'У вас новый матч!', 'match_id', match_id_var),
            false,
            NOW()
        );
    END IF;

    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- Пересоздаем триггер
DROP TRIGGER IF EXISTS create_match_trigger ON swipes;
CREATE TRIGGER create_match_trigger
    AFTER INSERT ON swipes
    FOR EACH ROW
    EXECUTE FUNCTION create_match_on_mutual_like();

-- Проверка
SELECT 'Триггер create_match_on_mutual_like успешно исправлен!' as status;

COMMENT ON FUNCTION create_match_on_mutual_like() IS 
'Триггер автоматически создает матч при взаимном лайке. 
Исправлено: использование правильных имен полей (target_user_id, type) 
и правильной структуры notifications (data jsonb).';
