import math
from pyscript import document, window


def calculate(event):
    banner = document.getElementById('banner-result')

    try:
        n_str = document.getElementById('input-n').value
        k_str = document.getElementById('input-k').value

        if not n_str or not k_str:
            banner.innerHTML = "خطا: لطفاً مقادیر هر دو فیلد را وارد کنید."
            return

        n = int(n_str)
        k = int(k_str)

        if n < 0 or k < 0:
            banner.innerHTML = "خطا: مقادیر وارد شده باید بزرگتر یا مساوی صفر باشند."
            return

        if k > n:
            banner.innerHTML = (
                f"خطا: تعداد دختران ({k}) نمی‌تواند از کل فرزندان ({n}) بیشتر باشد!"
            )
            return

        total_outcomes = 2 ** n
        combinations = math.comb(n, k)

        if total_outcomes == 0:
            banner.innerHTML = (
                "خطا: مقدار کل فرزندان به قدری بزرگ است که در حافظه جا نمی‌شود."
            )
            return

        gcd_val = math.gcd(combinations, total_outcomes)
        num = combinations // gcd_val
        den = total_outcomes // gcd_val

        prob_dec = combinations / total_outcomes
        prob_percent = prob_dec * 100

        fraction_str = f"{num}/{den}" if den != 1 else str(num)

        banner.innerHTML = (
            f"احتمال داشتن {k} دختر در خانواده‌ای با {n} فرزند: "
            f"<strong>{fraction_str}</strong> (معادل {prob_percent:g}٪)"
        )

        step1_text = (
            f"برای هر فرزند ۲ حالت ممکن (پسر یا دختر) وجود دارد. بنابراین برای {n} فرزند "
            f"طبق اصل ضرب، تعداد کل چیدمان‌های ممکن برابر است با "
            f"2<sup>{n}</sup> = {total_outcomes} حالت."
        )

        step2_text = (
            f"ما به دنبال حالت‌هایی هستیم که دقیقاً {k} جایگاه از {n} جایگاه به دختران "
            f"اختصاص یابد. این مقدار معادل ترکیب {k} از {n} است که برابر می‌شود با "
            f"{combinations} حالت مطلوب."
        )

        step3_text = (
            f"احتمال وقوع، برابر است با تقسیم حالت‌های مطلوب بر کل حالت‌ها: "
            f"{combinations} / {total_outcomes} که پس از ساده‌سازی کسر معادل "
            f"{fraction_str} (یا {prob_percent:g} درصد) خواهد شد."
        )

        document.getElementById("step-1-text").innerHTML = step1_text
        document.getElementById("step-2-text").innerHTML = step2_text
        document.getElementById("step-3-text").innerHTML = step3_text

        sub_formula = (
            f"P(X = {k}) = "
            f"\\binom{{{n}}}{{{k}}}"
            f"\\left(\\frac{{1}}{{2}}\\right)^{{{n}}}"
            f"= \\frac{{{combinations}}}{{{total_outcomes}}}"
        )

        if num != combinations and den != total_outcomes:
            sub_formula += f" = \\frac{{{num}}}{{{den}}}"

        math_box = document.getElementById("substituted-formula")
        math_box.innerHTML = "\\[" + sub_formula + "\\]"

        window.renderMathInElement(
            document.getElementById("steps-container"),
            window.katexOptions,
        )

    except ValueError:
        banner.innerHTML = "خطا: لطفاً مقادیر عددی صحیح و معتبر وارد کنید."

    except Exception as e:
        banner.innerHTML = f"خطای پیش‌بینی نشده در پایتون: {e}"


pbar = document.getElementById("pbar")
if pbar:
    pbar.style.width = "100%"

overlay = document.getElementById("loading-overlay")
if overlay:
    overlay.classList.add("hidden")