package main

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

type PeopleNowPresent struct {
	Names []string `json:"names"`
	Value int      `json:"value"`
}

type SpaceAPI struct {
	Sensors struct {
		PeopleNowPresent []PeopleNowPresent `json:"people_now_present"`
	} `json:"sensors"`
}

func (s *server) viewSpaceAPI(w http.ResponseWriter, r *http.Request) {
	res := &SpaceAPI{}

	names := []string{}
	for _, p := range s.online(r.Context()) {
		names = append(names, p.Character)
	}
	res.Sensors.PeopleNowPresent = []PeopleNowPresent{
		{
			Names: names,
			Value: len(names),
		},
	}

	w.Header().Set("Content-Type", "application/json")
	json.NewEncoder(w).Encode(res)
}
