package main

import (
	"encoding/json"
	"os"
	"strings"
)

// cihazKaldirGonder: profilCikar icinde kullanilan sunucu kaldirma adimi.
// Testlerde fikoyt sunucusuna gercek istek atilmamasi icin degistirilebilir.
var cihazKaldirGonder = cihazKaldirProfil

// cihazKaldirProfil: verilen profilin cihaz kaydini sunucudan siler. Profilin kendi
// oturum cerezleriyle cagrilir; sunucu kaydin sahibini dogrular (kaldir ucu). Baska hesabin
// cihaziysa sunucu reddeder ve yerel veriye dokunulmaz. Soket varsa sunucu ayrica
// "kaldirildi" olayi yayar; o olay da bu profilde oturumu ve soketi kapatir.
func cihazKaldirProfil(anahtar string) error {
	kimlik, err := cihazKimligiProfil(anahtar)
	if err != nil {
		return err
	}
	if _, err := fikoytCagriProfil(anahtar, "kaldir", map[string]any{"cihazKimlik": kimlik}); err != nil {
		return err
	}
	return nil
}

// cagriYerelHataMi: cihaz kaldirma cagrisi oturum yok / sunucuya ulasilamadi nedeniyle
// basarisiz olduysa true dondurur (sunucuda zaten kayit yok, yerel temizlemeye devam edilebilir).
// Sunucu acikca reddediyse (baska hesabin cihazi) false dondurur.
func cagriYerelHataMi(err error) bool {
	msg := strings.ToLower(err.Error())
	for _, h := range []string{"giriş gerekli", "oturum", "sunucuya ulaşılamadı", "sunucuya ulasilamadi"} {
		if strings.Contains(msg, h) {
			return true
		}
	}
	return false
}

// izinSifirlaProfil: verilen profilin tum ana izinlerini kapatir ve diskten siler
// (everythingAra, catiaAc, usb, dosyaYonetimi). Kaldırma akışında sunucu görünümünün
// tazelenmesi icin kullanilir; kalan adim izinDurumGonderProfil cagrisidir.
func izinSifirlaProfil(anahtar string) error {
	y := Izinler{}
	izinMu.Lock()
	izinler[anahtar] = y
	izinMu.Unlock()
	yol, err := izinDosyasiProfil(anahtar)
	if err != nil {
		return err
	}
	veri, err := json.MarshalIndent(y, "", "  ")
	if err != nil {
		return err
	}
	return os.WriteFile(yol, veri, 0o600)
}
