-- Migration: Change period_type to start_date in score_conditions
-- This allows specifying a start date for counting points instead of period type
-- Date can be in the past or future, NULL means count all time

-- Добавляем новое поле start_date
ALTER TABLE score_conditions 
ADD COLUMN IF NOT EXISTS start_date DATE;

-- Миграция данных: для существующих записей с period_type устанавливаем start_date
-- Если period_type = 'week', то start_date = начало текущей недели
-- Если period_type = 'month', то start_date = начало текущего месяца
-- Если period_type = 'year', то start_date = начало текущего года
-- Если period_type IS NULL, то start_date = NULL (за всё время)
UPDATE score_conditions
SET start_date = CASE
    WHEN period_type = 'week' THEN DATE_TRUNC('week', CURRENT_DATE)::DATE
    WHEN period_type = 'month' THEN DATE_TRUNC('month', CURRENT_DATE)::DATE
    WHEN period_type = 'year' THEN DATE_TRUNC('year', CURRENT_DATE)::DATE
    ELSE NULL
END
WHERE start_date IS NULL;

-- Обновляем уникальное ограничение (удаляем старое, добавляем новое)
ALTER TABLE score_conditions 
DROP CONSTRAINT IF EXISTS unique_score_condition;

ALTER TABLE score_conditions 
ADD CONSTRAINT unique_score_condition 
UNIQUE (project_id, required_points, start_date);

-- Обновляем комментарии
COMMENT ON COLUMN score_conditions.start_date IS 'Date from which to start counting points. NULL means count all time.';

-- Примечание: поле period_type оставляем пока для обратной совместимости
-- Его можно будет удалить позже после проверки, что всё работает:
-- ALTER TABLE score_conditions DROP COLUMN period_type;

