-- Script SQL to clean up duplicate events
-- Keeps events with externalEventId, removes duplicates without externalEventId
-- For events with same title, calendarId, and date (for all-day events) or same start/end (for timed events)

-- First, let's see the duplicates
SELECT 
    "calendarId",
    title,
    DATE("start") as start_date,
    DATE("end") as end_date,
    COUNT(*) as duplicate_count,
    COUNT(CASE WHEN "externalEventId" IS NOT NULL THEN 1 END) as with_external_id,
    COUNT(CASE WHEN "externalEventId" IS NULL THEN 1 END) as without_external_id
FROM "Event"
WHERE title IN ('Vendredi saint', 'Dimanche de Pâques')
GROUP BY "calendarId", title, DATE("start"), DATE("end")
HAVING COUNT(*) > 1
ORDER BY title, start_date;

-- Delete duplicates: keep the one with externalEventId, or the oldest one if none have externalEventId
WITH duplicates AS (
    SELECT 
        id,
        "calendarId",
        title,
        "start",
        "end",
        "externalEventId",
        ROW_NUMBER() OVER (
            PARTITION BY 
                "calendarId", 
                title, 
                DATE("start"), 
                DATE("end")
            ORDER BY 
                CASE WHEN "externalEventId" IS NOT NULL THEN 0 ELSE 1 END, -- Prefer events with externalEventId
                "createdAt" ASC -- If no externalEventId, keep the oldest
        ) as rn
    FROM "Event"
    WHERE title IN ('Vendredi saint', 'Dimanche de Pâques')
)
DELETE FROM "Event"
WHERE id IN (
    SELECT id FROM duplicates WHERE rn > 1
);

-- Verify cleanup
SELECT 
    id,
    title,
    "calendarId",
    "externalEventId",
    "start",
    "end"
FROM "Event"
WHERE title IN ('Vendredi saint', 'Dimanche de Pâques')
ORDER BY title, "start";
