import gradio as gr
from themes import IndonesiaTheme

import gradio as gr

def create_interface(models, tts_voices, tts_func):
    initial_md = """
    # TTS-RVC-Tokoh Indonesia

    Pembuktian algoritma **Retrieval-based Voice Conversion (RVC)** dan teknologi **Edge TTS** yang dapat membuat clone dari suara tokoh-tokoh penting di Indonesia. 

    **Perhatian:** Harap tidak menyalahgunakan teknologi ini.
    """

    app = gr.Blocks(theme=IndonesiaTheme(), title="TTS-RVC-Tokoh Indonesia")
    with app:
        # Tambahkan banner di bagian atas
        gr.HTML("""
        <div style="text-align: center; margin-top: 20px;">
            <img src="https://i.ibb.co.com/dm13YjJ/banner1.jpg" alt="Banner" style="width: 100%; max-width: 1200px; border-radius: 10px;">
        </div>
        """)
        gr.Markdown(initial_md)
        with gr.Row():
            with gr.Column():
                model_name = gr.Dropdown(
                    label="Model",
                    choices=models,
                    value=models[0],
                )
                f0_key_up = gr.Number(
                    label="Tune (+12 = 1 oktaf dari edge-tts, nilai terbaik tergantung pada model dan pembicara)",
                    value=2,
                )
            with gr.Column():
                f0_method = gr.Radio(
                    label="Metode ekstraksi pitch (pm: sangat cepat, kualitas rendah, rmvpe: sedikit lambat, kualitas tinggi)",
                    choices=["pm", "rmvpe"],  # harvest and crepe terlalu lambat
                    value="rmvpe",
                    interactive=True,
                )
                index_rate = gr.Slider(
                    minimum=0,
                    maximum=1,
                    label="Tingkat indeks",
                    value=0.5,
                    interactive=True,
                )
                protect0 = gr.Slider(
                    minimum=0,
                    maximum=0.5,
                    label="Perlindungan",
                    value=0.33,
                    step=0.01,
                    interactive=True,
                )
        with gr.Row():
            with gr.Column():
                tts_voice = gr.Dropdown(
                    label="Pembicara Edge-tts (format: bahasa-Negara-Nama-Jenis Kelamin), pastikan jenis kelamin cocok dengan model",
                    choices=tts_voices,
                    allow_custom_value=False,
                    value="id-ID-ArdiNeural-Male",
                )
                speed = gr.Slider(
                    minimum=-100,
                    maximum=100,
                    label="Kecepatan bicara (%)",
                    value=0,
                    step=10,
                    interactive=True,
                )
                tts_text = gr.Textbox(label="Teks Input", value="Konversi dari teks ke suara dalam bahasa Indonesia.")
            with gr.Column():
                but0 = gr.Button("✅ Konversi Suara", variant="primary")
                info_text = gr.Textbox(label="Informasi Output")
            with gr.Column():
                edge_tts_output = gr.Audio(label="Suara Edge", type="filepath")
                tts_output = gr.Audio(label="Hasil")
            but0.click(
                tts_func,
                [
                    model_name,
                    speed,
                    tts_text,
                    tts_voice,
                    f0_key_up,
                    f0_method,
                    index_rate,
                    protect0,
                ],
                [info_text, edge_tts_output, tts_output],
            )
        with gr.Row():
            examples = gr.Examples(
                examples_per_page=100,
                examples=[
                    ["Ini adalah demo percobaan menggunakan Bahasa Indonesia untuk pria.", "jokowi"],
                    ["Ini adalah teks percobaan menggunakan Bahasa Indonesia pada wanita.", "prabowo"],
                ],
                inputs=[tts_text, tts_voice],
            )
        
        # Tambahkan footer di bagian bawah
        gr.HTML("""
        <footer style="text-align: center; margin-top: 20px; color:silver;">
            Energi Semesta Digital © 2024 __drat. | 🇮🇩 Untuk Indonesia Jaya!
        </footer>
        """)

    return app