package main

import (
	"encoding/json"
	"net/http"
	"net/http/httptest"
	"testing"
)

// cihazIstegi: verilen token ile /cihaz isleyicisine GET atar; kod ve cihazKimlik degerini dondurur.
func cihazIstegi(t *testing.T, token string) (int, string) {
	t.Helper()
	h := korumali(cihazKimlikHandler)
	req := httptest.NewRequest(http.MethodGet, "/cihaz", nil)
	req.Header.Set("X-Bridge-Token", token)
	rec := httptest.NewRecorder()
	h(rec, req)
	if rec.Code != http.StatusOK {
		return rec.Code, ""
	}
	var v struct {
		CihazKimlik string `json:"cihazKimlik"`
	}
	if err := json.Unmarshal(rec.Body.Bytes(), &v); err != nil {
		t.Fatalf("cevap JSON degil: %v", err)
	}
	return rec.Code, v.CihazKimlik
}

// TestCihazKimlikProfilIzole: /cihaz her token icin o hesabin kendi cihaz kimligini dondurur.
// Iki hesap ayni bilgisayarda olsa bile kimlikleri farklidir ve birbirinin kimligi sizmaz.
func TestCihazKimlikProfilIzole(t *testing.T) {
	kuruluSifirla(t)
	profilTokenKur(t, "ahmet", "t-ahmet")
	profilTokenKur(t, "ayse", "t-ayse")
	etkinTestKur(t, "ahmet", "ayse")

	c1, k1 := cihazIstegi(t, "t-ahmet")
	c2, k2 := cihazIstegi(t, "t-ayse")
	if c1 != http.StatusOK || c2 != http.StatusOK || k1 == "" || k2 == "" {
		t.Fatalf("iki hesap da kimlik almali: %d %q / %d %q", c1, k1, c2, k2)
	}
	if k1 == k2 {
		t.Errorf("iki hesabin cihaz kimligi ayni olmamali")
	}
	// Her kimlik, o hesabin kendi kaydiyla birebir eslesmeli.
	beklenen, err := cihazKimligiProfil("ahmet")
	if err != nil || k1 != beklenen {
		t.Errorf("ahmet kimligi kendi kaydiyla eslesmiyor: %q vs %q (%v)", k1, beklenen, err)
	}
}
