package main

// Kurulu eklenti durumu (token gerekli). Web bu ucu yalnizca okumak icin kullanir.
// Etkinlestirme, devre disi birakma ve kaldirma isteklari socket uzerinden gelir (bkz. eklenti_socket.go).

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

type kuruluDurum struct {
	Anahtar string          `json:"anahtar"`
	Surum   string          `json:"surum"`
	Etkin   bool            `json:"etkin"`
	Ayar    json.RawMessage `json:"ayar,omitempty"`
	// Acilista: imzali manifest + kurulum onayi ile acilista baslar.
	Acilista bool `json:"acilista"`
	// Calisiyor: su an arka plan sureci calisiyor mu (bridge'in gercek durumu).
	Calisiyor bool `json:"calisiyor"`
}

// kuruluListeKopya: kurulu eklentilerin anlik durumu. Son kaydedilen ayarlar da eklenir.
func kuruluListeKopya() []kuruluDurum {
	kuruluMu.Lock()
	kopya := make([]kuruluDurum, 0, len(kuruluListe))
	for _, k := range kuruluListe {
		kopya = append(kopya, kuruluDurum{Anahtar: k.Anahtar, Surum: k.Surum, Etkin: k.Etkin, Acilista: k.Acilista})
	}
	kuruluMu.Unlock()
	for i := range kopya {
		kopya[i].Ayar = ayarGoster(kayitliAyar(kopya[i].Anahtar))
		kopya[i].Calisiyor = ekSurecCalisiyor(kopya[i].Anahtar)
	}
	return kopya
}

func eklentiKuruluHandler(w http.ResponseWriter, r *http.Request) {
	if r.Method != http.MethodGet {
		http.Error(w, "yalnizca GET", http.StatusMethodNotAllowed)
		return
	}
	yazJSON(w, http.StatusOK, kuruluListeKopya())
}
