"""Whether a workspace spends AI credits. Core owns this; workers only ask."""
from __future__ import annotations

from uuid import UUID

from src.domain.billing.constants import STAFF_PLAN_SLUG


def email_is_staff(email: str | None, staff_domains: set[str]) -> bool:
    if not email or not staff_domains or "@" not in email:
        return False
    return email.lower().rsplit("@", 1)[-1] in staff_domains


def skips_ai_credit_limits(*, skip_plan_quota_limits: bool, plan_slug: str | None) -> bool:
    """Staff and quota-exempt workspaces do not consume the customer credit wallet."""
    if skip_plan_quota_limits:
        return True
    return (plan_slug or "").lower() == STAFF_PLAN_SLUG


async def workspace_skips_ai_credits(db, workspace_id: UUID) -> bool:
    """True when codegen must not reserve or fail on customer AI credits."""
    from src.config import get_settings
    from src.domain.auth.repository import UserRepository
    from src.domain.billing.repository import SubscriptionRepository
    from src.domain.workspaces.repository import WorkspaceRepository

    settings = get_settings()
    if str(workspace_id).lower() in settings.quota_exempt_workspace_id_set:
        return True

    workspace = await WorkspaceRepository(db).get_by_id(workspace_id)
    if not workspace:
        return False

    plan_slug = getattr(workspace, "selected_plan_slug", None)
    subscription = await SubscriptionRepository(db).get_by_workspace(workspace_id)
    if subscription and getattr(subscription, "plan_slug", None):
        plan_slug = subscription.plan_slug

    if skips_ai_credit_limits(
        skip_plan_quota_limits=bool(getattr(workspace, "skip_plan_quota_limits", False)),
        plan_slug=plan_slug,
    ):
        return True

    owner_id = getattr(workspace, "owner_id", None)
    if not owner_id:
        return False
    owner = await UserRepository(db).get_by_id(owner_id)
    return bool(owner and email_is_staff(owner.email, settings.staff_email_domain_set))
