from app.repositories.clickhouse_repository import ClickHouseRepository
from app.repositories.mysql_repository import MySQLRepository
from app.services.llm_service import LLMService


SCORE_PROMPT_TEMPLATE = """
You are an AI Call Quality Advisor.
Evaluate this call transcript and output strict JSON:
{
  "quality_score": 0-100,
  "compliance_score": 0-100,
  "compliance_violations": ["..."],
  "strengths": ["..."],
  "improvements": ["..."],
  "agent_feedback": "...",
  "call_summary": "..."
}

Transcript:
{transcript}
"""


class ScoringService:
    def __init__(self, mysql_repo: MySQLRepository, clickhouse_repo: ClickHouseRepository, llm_service: LLMService):
        self.mysql = mysql_repo
        self.clickhouse = clickhouse_repo
        self.llm = llm_service

    def score_call(self, tenant_id: str, call_id: str, agent_id: str):
        chunks = self.mysql.get_call_chunks_text(tenant_id, call_id)
        transcript = '\n'.join([f"[{c['speaker']}] {c['text']}" for c in chunks])

        prompt = SCORE_PROMPT_TEMPLATE.format(transcript=transcript)
        score_payload = self.llm.generate_json(prompt)

        quality = float(score_payload.get('quality_score', 0.0))
        compliance = float(score_payload.get('compliance_score', 0.0))
        issues = score_payload.get('compliance_violations', []) or []

        self.mysql.save_score(tenant_id, call_id, agent_id, score_payload)
        self.clickhouse.insert_score_event(
            tenant_id=tenant_id,
            call_id=call_id,
            agent_id=agent_id,
            quality_score=quality,
            compliance_score=compliance,
            issues=issues,
        )

        return score_payload
