package main

// Token -> profil eslemesi: gelen bir istegin hangi hesap profiline ait oldugunu bulur.
// Eslesme ozetleri her profilin kendi eslesmeler.json dosyasindadir.

import (
	"crypto/subtle"
	"encoding/json"
	"os"
	"path/filepath"
)

// profilEslesmeleri: verilen profil klasorundeki eslesme kayitlarini okur.
func profilEslesmeleri(klasor string) []eslesme {
	veri, err := os.ReadFile(filepath.Join(klasor, "eslesmeler.json"))
	if err != nil {
		return nil
	}
	var liste []eslesme
	_ = json.Unmarshal(veri, &liste)
	return liste
}

// tokenProfili: token'in ozetiyle eslesen profilin anahtarini dondurur. Eslesme yoksa false.
func tokenProfili(t string) (string, bool) {
	if t == "" {
		return "", false
	}
	kok, err := veriKlasoru()
	if err != nil {
		return "", false
	}
	girdiler, err := os.ReadDir(filepath.Join(kok, "profiller"))
	if err != nil {
		return "", false
	}
	ozet := tokenOzeti(t)
	for _, g := range girdiler {
		if !g.IsDir() || !profilAnahtarDesen.MatchString(g.Name()) {
			continue
		}
		for _, e := range profilEslesmeleri(filepath.Join(kok, "profiller", g.Name())) {
			if subtle.ConstantTimeCompare([]byte(e.TokenOzeti), []byte(ozet)) == 1 {
				return g.Name(), true
			}
		}
	}
	return "", false
}
