#!/usr/bin/python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Pango

CARDS = [
    ('Hello','Halo'),('Thank you','Terima kasih'),('Good morning','Selamat pagi'),
    ('Good night','Selamat malam'),('How are you?','Apa kabar?'),('I am fine','Saya baik'),
    ('Please','Tolong'),('Sorry','Maaf'),('Yes','Ya'),('No','Tidak'),
    ('Water','Air'),('Food','Makanan'),('House','Rumah'),('Car','Mobil'),
    ('Book','Buku'),('Pen','Pena'),('Computer','Komputer'),('Phone','Telepon'),
    ('School','Sekolah'),('Work','Pekerjaan'),('Friend','Teman'),('Family','Keluarga'),
    ('Money','Uang'),('Time','Waktu'),('Day','Hari'),('Night','Malam'),
    ('Beautiful','Cantik/Indah'),('Big','Besar'),('Small','Kecil'),('Fast','Cepat'),
    ('Slow','Lambat'),('Good','Baik'),('Bad','Buruk'),('Happy','Senang'),('Sad','Sedih'),
]

class App(Gtk.Window):
    def __init__(self):
        super().__init__(title='Language Flashcards — English / Indonesian')
        self.set_default_size(480, 380)
        self.idx = 0; self.showing_back = False
        self.learned = set()
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
        vbox.set_margin_top(16); vbox.set_margin_bottom(16)
        vbox.set_margin_start(16); vbox.set_margin_end(16)
        self.add(vbox)
        self.progress = Gtk.ProgressBar()
        self.progress.set_show_text(True)
        vbox.pack_start(self.progress, False, False, 0)
        # card area
        frame = Gtk.Frame()
        card_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=8)
        card_box.set_margin_top(24); card_box.set_margin_bottom(24)
        card_box.set_margin_start(24); card_box.set_margin_end(24)
        self.lang_lbl = Gtk.Label(label='English')
        card_box.pack_start(self.lang_lbl, False, False, 0)
        self.word_lbl = Gtk.Label()
        self.word_lbl.override_font(Pango.FontDescription('Bold 36'))
        self.word_lbl.set_line_wrap(True)
        card_box.pack_start(self.word_lbl, True, True, 0)
        self.flip_btn = Gtk.Button(label='Flip →')
        self.flip_btn.connect('clicked', self.flip)
        card_box.pack_start(self.flip_btn, False, False, 0)
        frame.add(card_box)
        vbox.pack_start(frame, True, True, 0)
        nav_box = Gtk.Box(spacing=8)
        prev_btn = Gtk.Button(label='◀ Prev')
        prev_btn.connect('clicked', lambda *_: self.navigate(-1))
        nav_box.pack_start(prev_btn, True, True, 0)
        self.pos_lbl = Gtk.Label()
        nav_box.pack_start(self.pos_lbl, True, True, 0)
        next_btn = Gtk.Button(label='Next ▶')
        next_btn.connect('clicked', lambda *_: self.navigate(1))
        nav_box.pack_start(next_btn, True, True, 0)
        vbox.pack_start(nav_box, False, False, 0)
        learned_btn = Gtk.Button(label='Mark as Learned ✓')
        learned_btn.connect('clicked', self.mark_learned)
        vbox.pack_start(learned_btn, False, False, 0)
        self.update_card()
    def update_card(self):
        front, back = CARDS[self.idx]
        self.showing_back = False
        self.lang_lbl.set_text('English')
        self.word_lbl.set_text(front)
        self.flip_btn.set_label('Flip → (see Indonesian)')
        self.pos_lbl.set_text(f'{self.idx+1} / {len(CARDS)}')
        frac = len(self.learned) / len(CARDS)
        self.progress.set_fraction(frac)
        self.progress.set_text(f'Learned: {len(self.learned)}/{len(CARDS)}')
        if self.idx in self.learned:
            self.word_lbl.set_markup(f'<span foreground="green">{front}</span>')
    def flip(self, *_):
        front, back = CARDS[self.idx]
        if not self.showing_back:
            self.lang_lbl.set_text('Indonesian')
            self.word_lbl.set_text(back)
            self.flip_btn.set_label('Flip ← (see English)')
            self.showing_back = True
        else:
            self.update_card()
    def navigate(self, d):
        self.idx = (self.idx + d) % len(CARDS)
        self.update_card()
    def mark_learned(self, *_):
        self.learned.add(self.idx)
        self.update_card()

win = App()
win.connect('destroy', Gtk.main_quit)
win.show_all()
Gtk.main()
