import streamlit as st
import os
import google.generativeai as genai

# --- Konfigurasi Halaman Streamlit ---
st.set_page_config(page_title="Asisten Diagnostik TKR", page_icon="🛠️", layout="wide")
st.title("🛠️ Asisten Diagnostik Awal Kendaraan")
st.caption("Didukung oleh KA Generatif (Gemini)")

# --- Konfigurasi API Key & Model Gemini ---
api_key_checked_success = False
model = None

def initialize_model_with_retry(max_retries=3, delay=2):
    global model, api_key_checked_success

    # Hanya jalankan jika belum pernah berhasil
    if api_key_checked_success:
        return True 

    for attempt in range(max_retries):
        try:
            st.info(f"Mencoba konfigurasi API Key... (Percobaan {attempt + 1}/{max_retries})")
            api_key = os.environ['GOOGLE_API_KEY']
            genai.configure(api_key=api_key)
            model_instance = genai.GenerativeModel('models/gemini-pro-latest')

            # Tes koneksi sederhana (opsional tapi bagus)
            # model_instance.generate_content("test", generation_config=genai.types.GenerationConfig(max_output_tokens=1))

            # Jika semua berhasil sampai sini:
            model = model_instance # Assign ke variabel global HANYA jika berhasil
            api_key_checked_success = True # Tandai berhasil
            st.success("API Key & Model AI berhasil dikonfigurasi.")
            # Hapus pesan percobaan dari layar
            st.empty() 
            return True # Berhasil

        except KeyError:
            st.warning(f"Percobaan {attempt + 1}: GOOGLE_API_KEY belum siap. Mencoba lagi dalam {delay} detik...")
            if attempt < max_retries - 1: # Jangan sleep di percobaan terakhir
                time.sleep(delay)
            else:
                st.error("Error: GOOGLE_API_KEY tidak ditemukan di Replit Secrets setelah beberapa percobaan.")
                st.info("Pastikan GOOGLE_API_KEY sudah ditambahkan ke Secrets dan coba refresh halaman.")
                return False # Gagal setelah semua percobaan

        except Exception as e:
            st.error(f"Error saat mengkonfigurasi atau memuat model AI (Percobaan {attempt + 1}): {e}")
            if attempt < max_retries - 1:
                time.sleep(delay)
            else:
                 st.error("Gagal mengkonfigurasi model setelah beberapa percobaan.")
                 return False # Gagal setelah semua percobaan

    # Seharusnya tidak sampai sini, tapi sebagai fallback
    return False

# --- Fungsi untuk Membuat Prompt ---
def buat_prompt(gejala):
    # Prompt yang sama detailnya seperti sebelumnya
    return f"""
    Anda adalah seorang mekanik senior TKR (Teknik Kendaraan Ringan) yang sangat berpengalaman dan sabar dalam menjelaskan kepada siswa SMK.
    Seorang siswa melaporkan gejala kerusakan kendaraan berikut: '{gejala}'

    Tugas Anda:
    1. Analisis gejala tersebut.
    2. Berikan daftar kemungkinan penyebab umum kerusakan tersebut (maksimal 5 penyebab). Urutkan dari yang paling mungkin terjadi.
    3. Untuk setiap kemungkinan penyebab, berikan 1-2 langkah diagnostik awal yang SANGAT SEDERHANA dan AMAN yang bisa diperiksa oleh siswa TKR dengan pengawasan guru (misalnya cek visual, cek level cairan, mendengarkan suara). Hindari langkah yang memerlukan alat khusus atau pembongkaran kompleks di tahap awal ini.
    4. Gunakan bahasa yang teknis namun mudah dipahami oleh siswa SMK TKR. Berikan penjelasan singkat mengapa gejala itu bisa terkait dengan penyebab tersebut.

    Format Jawaban (Gunakan Markdown):
    **Kemungkinan Penyebab:**
    1. **[Nama Penyebab 1]:** [Penjelasan singkat kaitan gejala dengan penyebab].
       * _Langkah Diagnostik Awal:_ [Langkah 1]
       * _Langkah Diagnostik Awal:_ [Langkah 2 (jika ada)]
    2. **[Nama Penyebab 2]:** [Penjelasan singkat kaitan gejala dengan penyebab].
       * _Langkah Diagnostik Awal:_ [Langkah 1]
       * _Langkah Diagnostik Awal:_ [Langkah 2 (jika ada)]
    ... (dan seterusnya, maksimal 5)

    ---
    **Penting:** Ingatkan siswa bahwa ini hanyalah **diagnostik awal**. Pemeriksaan dan perbaikan lebih lanjut harus dilakukan oleh mekanik profesional atau di bawah pengawasan ketat guru praktik di bengkel sekolah.
    """

# --- Interface Pengguna Streamlit ---
st.subheader("Deskripsikan Gejala Kerusakan:")
gejala_input = st.text_area("Contoh: Mesin mobil tidak mau menyala saat distarter, hanya bunyi 'klik'.", height=100)

diagnosa_button = st.button("Mulai Diagnostik Awal", type="primary")

# --- Logika Saat Tombol Ditekan ---
if diagnosa_button:
    model_ready = initialize_model_with_retry()
    if model_ready:
        if not gejala_input:
            st.warning("Mohon masukkan deskripsi gejala terlebih dahulu.")
        else:
            prompt_final = buat_prompt(gejala_input)

            with st.spinner("🤖 KA sedang menganalisis gejala... Mohon tunggu sebentar..."):
                try:
                    response = model.generate_content(prompt_final)
                    jawaban_ai = response.text

                    st.divider() # Garis pemisah
                    st.subheader("🔬 Hasil Analisis KA:")
                    st.markdown(jawaban_ai) # Gunakan markdown untuk format yang lebih baik

                except Exception as e:
                    st.error(f"Terjadi kesalahan saat menghubungi KA: {e}")
                    st.info("Tips: Coba lagi beberapa saat. Pastikan API Key valid dan tidak melebihi batas penggunaan.")

# --- Footer ---
st.divider()
st.markdown("Aplikasi TKR Diagnostik Kendaraan | Dibuat dengan Streamlit & Google Gemini")