import gradio as gr
import os
from deep_translator import GoogleTranslator
from huggingface_hub import InferenceClient

# دریافت توکن
HF_TOKEN = os.environ.get("HUGGINGFACE_API_TOKEN")
if not HF_TOKEN:
    raise RuntimeError("Missing HUGGINGFACE_API_TOKEN secret")
hf_client = InferenceClient(token=HF_TOKEN)

def generate_topics(field, major, keywords, audience, level):
    if not all([field.strip(), major.strip(), keywords.strip(), audience.strip()]):
        return "<div style='color: red;'>❌ لطفاً همه فیلدها را پر کنید.</div>"

    base_prompt = (
        f"Suggest 3 academic thesis topics based on the following:\n"
        f"Field: {field}\n"
        f"Specialization: {major}\n"
        f"Keywords: {keywords}\n"
        f"Target Audience: {audience}\n"
        f"Level: {level}\n"
    )
    extra = (
        "Since this is a doctoral-level project, focus on proposing theoretical frameworks, "
        "advanced modeling approaches, and in-depth methodological contributions."
        if level == "دکتری"
        else
        "Focus on practical and applied thesis topics suitable for a master's level student."
    )
    prompt = base_prompt + extra

    try:
        resp = hf_client.chat.completions.create(
            model="deepseek-ai/DeepSeek-Prover-V2-671B",
            messages=[
                {"role":"system","content":"You are an academic advisor assistant."},
                {"role":"user","content":prompt}
            ],
            temperature=0.7,
            max_tokens=512
        )
        english = resp.choices[0].message.content.strip()
        try:
            translated = GoogleTranslator(source='en', target='fa').translate(english)
        except:
            translated = english

        items = [f"<li>{l}</li>" for l in translated.split("\n") if l.strip()]
        html = "<ol>" + "".join(items) + "</ol>"
        return (
            "<div>"
            f"{html}"
            "<br><br>📢 برای مشاوره تخصصی و ارائه موضوع های حرفه ای با کاسپین تماس بگیرید:<br>"
            "<strong>021-88252497</strong>"
            "</div>"
        )
    except Exception as e:
        return f"<div style='color: red;'>❌ خطا: {e}</div>"

# CSS سفارشی (سفید/مشکی + پنهان‌سازی فوتر + اصلاح باکس پاسخ)
custom_css = """
body, .gradio-container {
    background-color: white !important;
    color: black !important;
}
input, textarea, select, button {
    background-color: white !important;
    color: black !important;
    border: 1px solid #ccc !important;
}
/* تیتر و Markdown */
.markdown, .markdown h1, .markdown h2, .markdown h3, .markdown p {
    color: black !important;
}
/* باکس خروجی: پس‌زمینه کاملاً سفید و متن مشکی، شامل تمام زیرالمان‌ها */
#output_box {
    background-color: white !important;
    border: 1px solid #333 !important;
    padding: 15px !important;
    border-radius: 4px !important;
}
#output_box, 
#output_box * {
    color: black !important;
}
/* پنهان‌سازی کامل فوتر Gradio */
footer {
    display: none !important;
}
/* غیرفعال‌سازی تم تیره */
.gradio-container.dark {
    background-color: white !important;
    color: black !important;
}
"""

with gr.Blocks(css=custom_css, theme="default") as app:
    gr.Image(value="logo.png", interactive=False, show_label=False)
    gr.Markdown("## 🎓 پیشنهادگر موضوع پایان‌نامه کاسپین")

    with gr.Row():
        with gr.Column():
            field    = gr.Textbox(label="رشته", placeholder="مثال: کامپیوتر")
            major    = gr.Textbox(label="گرایش", placeholder="مثال: هوش مصنوعی")
            keywords = gr.Textbox(label="کلیدواژه‌ها", placeholder="مثال: یادگیری عمیق، بینایی ماشین")
            audience = gr.Textbox(label="جامعه هدف", placeholder="مثال: دانشجویان دکتری")
            level    = gr.Dropdown(["کارشناسی ارشد","دکتری"], label="مقطع")
            submit   = gr.Button("🎯 پیشنهاد موضوع")
        with gr.Column():
            output   = gr.HTML(elem_id="output_box")

    submit.click(
        fn=generate_topics,
        inputs=[field, major, keywords, audience, level],
        outputs=output
    )

if __name__ == "__main__":
    app.launch()