"""
Nom du script : gitlab_summary_service.py
Chemin : /gitlab-bridge/app/services/gitlab_summary_service.py
Description : Agrège les données GitLab nécessaires pour produire un résumé de projet exploitable.
Options éventuelles : Aucune.
Exemples d'utilisation : `build_summary(project, period_days)`.
Prérequis : Python 3.11+.
Auteur : Sylvain SCATTOLINI
Date de création / modification : 2026-03-25
Version : 1.1
"""

from __future__ import annotations

from datetime import datetime, timedelta, UTC

from app.clients.gitlab_client import GitLabClient


class GitLabSummaryService:
    """Construit un résumé simple à partir des issues GitLab."""

    def __init__(self, client: GitLabClient) -> None:
        self.client = client

    def build_summary(self, project: dict, period_days: int) -> dict:
        project_id = int(project['id'])
        period_start = datetime.now(UTC) - timedelta(days=period_days)
        open_issues = self.client.list_open_issues(project_id)
        closed_issues = self.client.list_closed_issues_since(project_id, period_start.isoformat())

        markdown = self._build_markdown(
            project_name=str(project.get('name', 'Projet GitLab')),
            period_days=period_days,
            open_count=len(open_issues),
            closed_count=len(closed_issues),
        )

        return {
            'open_issues': len(open_issues),
            'closed_issues_period': len(closed_issues),
            'markdown': markdown,
        }

    @staticmethod
    def _build_markdown(project_name: str, period_days: int, open_count: int, closed_count: int) -> str:
        return (
            f"## Résumé du projet {project_name}\n\n"
            f"Période analysée : {period_days} derniers jours\n\n"
            f"- {open_count} issues ouvertes\n"
            f"- {closed_count} issues fermées sur la période\n"
        )
