-- +goose Up
-- +goose StatementBegin

-- =========================================
-- ENUM: response_status - Статусы отклика
-- =========================================
CREATE TYPE response_status AS ENUM (
    'pending',    -- Ожидает рассмотрения заявителем
    'accepted',   -- Принят (волонтёр взял заявку)
    'rejected',   -- Отклонён заявителем
    'cancelled'   -- Отменён волонтёром
);

COMMENT ON TYPE response_status IS 'Статусы отклика волонтёра на заявку';

-- =========================================
-- ТАБЛИЦА: volunteer_responses - Отклики волонтёров на заявки
-- =========================================
CREATE TABLE volunteer_responses (
    id BIGSERIAL PRIMARY KEY,

    -- Связи
    request_id BIGINT NOT NULL REFERENCES requests(id) ON DELETE CASCADE,
    volunteer_id BIGINT NOT NULL REFERENCES users(id),

    -- Статус и сообщение
    status response_status DEFAULT 'pending',
    message TEXT,

    -- Временные метки
    responded_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
    accepted_at TIMESTAMP WITH TIME ZONE,
    rejected_at TIMESTAMP WITH TIME ZONE,

    -- Аудит
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,

    -- Ограничение: один волонтёр может откликнуться на заявку только один раз
    UNIQUE(request_id, volunteer_id)
);

-- Комментарии
COMMENT ON TABLE volunteer_responses IS 'Отклики волонтёров на заявки помощи';
COMMENT ON COLUMN volunteer_responses.message IS 'Сообщение волонтёра при отклике (опционально)';
COMMENT ON COLUMN volunteer_responses.responded_at IS 'Время создания отклика';

-- Индексы
CREATE INDEX idx_volunteer_responses_request_id ON volunteer_responses(request_id);
CREATE INDEX idx_volunteer_responses_volunteer_id ON volunteer_responses(volunteer_id);
CREATE INDEX idx_volunteer_responses_status ON volunteer_responses(status);
CREATE INDEX idx_volunteer_responses_volunteer_status ON volunteer_responses(volunteer_id, status);

-- +goose StatementEnd

-- +goose Down
-- +goose StatementBegin
DROP TABLE IF EXISTS volunteer_responses CASCADE;
DROP TYPE IF EXISTS response_status CASCADE;
-- +goose StatementEnd
