-- Migration 013: Create reports tables
-- Report: aggregates completed services/projects for a team member on a date
-- Used to calculate labor share for payment

-- Team member work report
CREATE TABLE reports (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),

    team_profile_id UUID NOT NULL REFERENCES team_profiles(id) ON DELETE CASCADE,
    date DATE NOT NULL,

    -- One report per team member per date
    UNIQUE (team_profile_id, date)
);

-- M2M: Report to services
CREATE TABLE report_services (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),

    report_id UUID NOT NULL REFERENCES reports(id) ON DELETE CASCADE,
    service_id UUID NOT NULL REFERENCES services(id) ON DELETE CASCADE,

    UNIQUE (report_id, service_id)
);

-- M2M: Report to projects
CREATE TABLE report_projects (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),

    report_id UUID NOT NULL REFERENCES reports(id) ON DELETE CASCADE,
    project_id UUID NOT NULL REFERENCES projects(id) ON DELETE CASCADE,

    UNIQUE (report_id, project_id)
);

-- Indexes
CREATE INDEX idx_reports_team_profile ON reports(team_profile_id);
CREATE INDEX idx_reports_date ON reports(date);
CREATE INDEX idx_report_services_report ON report_services(report_id);
CREATE INDEX idx_report_services_service ON report_services(service_id);
CREATE INDEX idx_report_projects_report ON report_projects(report_id);
CREATE INDEX idx_report_projects_project ON report_projects(project_id);
