"""کلید API برای اتصال سایت هوشمارک به این سرویس (بدون نیاز به FastAPI).

کلید هنگام اجرای سرور از متغیر محیطی HOOSHMARK_API_KEY خوانده می‌شود:

    HOOSHMARK_API_KEY=... uvicorn app:app --host 127.0.0.1 --port 8000
"""
import hmac
import os

ENV_NAME = 'HOOSHMARK_API_KEY'
MIN_LENGTH = 32  # هم‌اندازهٔ حداقل طول NATIVE_BRAIN_INTERNAL_TOKEN در سایت

KEY_HINT = ('برای ساختن کلید: python -c "import secrets; print(secrets.token_urlsafe(32))" ؛ '
            f'سپس سرور را با {ENV_NAME}=<کلید> اجرا کنید.')


class ApiKeyConfigError(RuntimeError):
    """کلید API تنظیم نشده یا معتبر نیست."""


def configured_key() -> str:
    """کلید تنظیم‌شده را برمی‌گرداند؛ اگر نبود یا کوتاه بود ApiKeyConfigError."""
    key = os.environ.get(ENV_NAME, '').strip()
    if not key:
        raise ApiKeyConfigError(f'متغیر محیطی {ENV_NAME} تنظیم نشده است. {KEY_HINT}')
    if len(key) < MIN_LENGTH:
        raise ApiKeyConfigError(f'{ENV_NAME} باید دست‌کم {MIN_LENGTH} نویسه باشد. {KEY_HINT}')
    return key


def extract_bearer(header_value) -> str:
    """مقدار هدر `Authorization: Bearer <key>` را درمی‌آورد؛ در غیر این صورت رشتهٔ خالی."""
    if not header_value:
        return ''
    scheme, _, token = header_value.strip().partition(' ')
    return token.strip() if scheme.lower() == 'bearer' else ''


def is_valid(supplied: str, expected: str) -> bool:
    """مقایسهٔ زمان‌ثابت کلید ارسالی با کلید تنظیم‌شده."""
    if not supplied or not expected:
        return False
    return hmac.compare_digest(supplied.encode('utf-8'), expected.encode('utf-8'))
