"""Personality protocol — the contract every voice overlay must satisfy."""

from __future__ import annotations

from typing import Protocol


class Personality(Protocol):
    """All user-facing text methods that a personality must implement."""

    name: str

    # --- Banner ---
    @property
    def banner(self) -> str: ...

    # --- Greetings ---
    def greeting(self, username: str) -> str: ...

    # --- Success ---
    @property
    def success_key_retrieved(self) -> str: ...

    @property
    def success_claude_launch(self) -> str: ...

    @property
    def success_agent_composed(self) -> str: ...

    # --- Errors ---
    def error_no_profile(self) -> str: ...
    def error_sso_expired(self, profile: str) -> str: ...
    def error_username_extraction(self, session_name: str) -> str: ...
    def error_revoked(self) -> str: ...
    def error_empty_credential(self) -> str: ...
    def error_secret_not_found(self, secret_path: str) -> str: ...
    def error_dependency_missing(self, name: str, install_hint: str) -> str: ...
    def error_python_version(self, current: str, minimum: str) -> str: ...
    def error_claude_not_found(self) -> str: ...
    def error_no_inference_profile(self, alias: str) -> str: ...
    def error_cheshire_gate_not_configured(self) -> str: ...
    def error_quota_exceeded(self, detail: str) -> str: ...

    # --- Hints ---
    @property
    def hint_font(self) -> str: ...

    @property
    def hint_eval_usage(self) -> str: ...

    @property
    def hint_claude_shortcut(self) -> str: ...

    # --- Status ---
    def status_detecting_identity(self) -> str: ...
    def status_fetching_secret(self) -> str: ...
    def status_identity_detected(self, username: str) -> str: ...
    def status_invoking_model(self, model_id: str) -> str: ...
    def status_model_ready(self, model_id: str) -> str: ...
    def status_resolved_profile(self, alias: str) -> str: ...
    def status_fetching_models(self) -> str: ...
    def status_checking_session(self) -> str: ...
    def status_using_api_key(self, identity: str = "") -> str: ...
    def status_checking_quota(self) -> str: ...

    # --- Compose ---
    def compose_greeting(self) -> str: ...

    # --- Quota ---
    def quota_no_usage(self, period: str) -> str: ...
    def quota_summary(self, total_tokens: int, request_count: int) -> str: ...
    def quota_exceeded(self, used: int, limit: int) -> str: ...
