"""Read boundary for private historical activities; raw payloads never cross it."""

from __future__ import annotations

from collections import Counter

from .contracts import (
    AvailabilityState,
    project_activity_for_product,
    project_telemetry_for_product,
)
from .repository import ActivityRepository


class ActivityReadService:
    def __init__(self, repository: ActivityRepository):
        self.repository = repository

    def list_activities(self, user_id: str):
        return tuple(project_activity_for_product(item) for item in self.repository.list_activities(user_id))

    def get_activity(self, user_id: str, activity_id: str):
        return project_activity_for_product(self.repository.get_activity(user_id, activity_id))

    def list_activity_telemetry(self, user_id: str, activity_id: str):
        activity = self.repository.get_activity(user_id, activity_id)
        return tuple(
            project_telemetry_for_product(item, activity.privacy)
            for item in self.repository.list_activity_telemetry(user_id, activity_id)
        )

    def list_activity_sources(self, user_id: str):
        return self.repository.list_activity_sources(user_id)

    def summarize_availability(self, user_id: str) -> dict[str, object]:
        activities = self.list_activities(user_id)
        fields = Counter(item.field_name for activity in activities for item in activity.field_availability if item.state is AvailabilityState.AVAILABLE)
        return {"activity_count": len(activities), "available_field_counts": dict(sorted(fields.items()))}
