"""提供商价格表与成本换算（ARCH §4.8）。

价格以「每百万 token 的最小货币单位（如分/cent）」表示，随 provider 配置维护；
未知 (provider, model) 则成本计 0（仍记账，便于观测）。
"""

from __future__ import annotations

import math
from dataclasses import dataclass


@dataclass(frozen=True)
class Price:
    in_per_mtok: int
    out_per_mtok: int
    currency: str


# 近似价（可后续移入 config / provider 配置维护）
_PRICING: dict[tuple[str, str], Price] = {
    ("deepseek", "deepseek-chat"): Price(in_per_mtok=27, out_per_mtok=110, currency="USD"),
}


def cost_minor(provider: str, model: str, input_tokens: int, output_tokens: int) -> tuple[int, str]:
    price = _PRICING.get((provider, model))
    if price is None:
        return 0, "USD"
    cost = math.ceil(
        input_tokens / 1_000_000 * price.in_per_mtok
        + output_tokens / 1_000_000 * price.out_per_mtok
    )
    return cost, price.currency
