"""
Estimate MMK charges for SocialFastMM services (USD rate → MMK via env).
"""

from __future__ import annotations

import math
import os
from typing import Any


def usd_to_mmk_rate() -> float:
    return float((os.getenv("SOCIAL_BOOSTING_USD_TO_MMK") or "3500").strip())


def parse_rate(val: object) -> float:
    try:
        return float(str(val).replace(",", "").strip() or "0")
    except ValueError:
        return 0.0


def parse_min_max(svc: dict[str, Any]) -> tuple[int, int]:
    try:
        mn = int(float(str(svc.get("min", 0)).replace(",", "")))
        mx = int(float(str(svc.get("max", 0)).replace(",", "")))
    except ValueError:
        return 1, 1_000_000
    if mx < mn:
        mx = mn
    return mn, mx


def estimate_charge_mmk(
    service: dict[str, Any],
    *,
    quantity: int = 0,
    comments: str = "",
) -> tuple[int, float]:
    """
    Returns (mmk_total, estimated_usd). SMM panels usually quote `rate` as USD per 1000 units.
    """
    stype = (service.get("type") or "").strip()
    rate = parse_rate(service.get("rate"))
    usd = 0.0

    if stype == "Custom Comments":
        lines = [x for x in comments.replace("\r\n", "\n").split("\n") if x.strip()]
        n = max(len(lines), 1)
        usd = (n / 1000.0) * rate
    else:
        # Default, Poll, Comment Likes, Package — rate is typically USD per 1000 quantity units
        q = max(int(quantity), 1)
        usd = (q / 1000.0) * rate

    mmk = max(1, math.ceil(usd * usd_to_mmk_rate()))
    return mmk, usd
