package main

// Tepsi arayuzu: bridge'in durumunu gosterir ve ayar sayfasini acar.
// Durum: hesap girisi (oturum) ve eslesme sayisi. Izin degisikligi ayar sayfasinda yapilir.

import (
	_ "embed"
	"fmt"
	"os/exec"
	"time"

	"github.com/getlantern/systray"
)

//go:embed tray.ico
var trayIkon []byte

const (
	ayarlarURL = "http://127.0.0.1:7878/ayarlar"
	girisURL   = "http://127.0.0.1:7878/giris"
	trayYenile = 5 * time.Second
)

func trayBaslat() {
	systray.Run(trayHazir, func() {})
}

func trayHazir() {
	systray.SetIcon(trayIkon)
	systray.SetTooltip("FikoYT Yerel Köprü")

	hesap := systray.AddMenuItem("", "")
	hesap.Disable()
	eslesme := systray.AddMenuItem("", "")
	eslesme.Disable()
	systray.AddSeparator()
	ayarlar := systray.AddMenuItem("Ayarları aç", "Eşleşme, izinler ve hesap")
	girisYap := systray.AddMenuItem("Hesapla giriş yap…", "fikoyt.com hesabınızla giriş yapın")
	oturumKapat := systray.AddMenuItem("Oturumu kapat", "Bu bilgisayardaki fikoyt.com oturumunu kapatır")
	systray.AddSeparator()
	cikis := systray.AddMenuItem("Çıkış", "Köprü'yü kapat")

	menuYenile := func() { trayDurumGuncelle(hesap, eslesme, ayarlar, girisYap, oturumKapat) }
	menuYenile()

	go func() {
		t := time.NewTicker(trayYenile)
		defer t.Stop()
		for {
			select {
			case <-ayarlar.ClickedCh:
				if err := tarayiciAc(ayarlarURL); err != nil {
					olayLog("ayar sayfasi acilamadi: %v", err)
				}
			case <-girisYap.ClickedCh:
				if err := tarayiciAc(girisURL); err != nil {
					olayLog("giris sayfasi acilamadi: %v", err)
				}
			case <-oturumKapat.ClickedCh:
				oturumSil()
				olayLog("yerel oturum kapatildi (tepsi)")
				menuYenile()
			case <-t.C:
				menuYenile()
			case <-cikis.ClickedCh:
				systray.Quit()
				return
			}
		}
	}()
}

// trayDurumGuncelle: menu durumunu gercek duruma gore gunceller. Gecerli olmayan
// islemler (giris yokken "Oturumu kapat" gibi) gizlenir.
func trayDurumGuncelle(hesap, eslesme, ayarlar, girisYap, oturumKapat *systray.MenuItem) {
	if _, err := oturumOku(); err != nil {
		hesap.SetTitle("Hesap: giriş yapılmadı")
		ayarlar.Hide()
		girisYap.Show()
		oturumKapat.Hide()
	} else {
		hesap.SetTitle("Hesap: fikoyt.com'a giriş yapıldı")
		ayarlar.Show()
		girisYap.Hide()
		oturumKapat.Show()
	}
	eslesme.SetTitle(fmt.Sprintf("Eşleşme: %d bilgisayar", len(eslesmeleriOku())))
}

func tarayiciAc(adres string) error {
	return exec.Command("rundll32", "url.dll,FileProtocolHandler", adres).Start()
}
