package controllers

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

	"github.com/owncast/owncast/core"
	"github.com/owncast/owncast/router/middleware"
	"github.com/owncast/owncast/utils"
)

// GetStatus gets the status of the server.
func GetStatus(w http.ResponseWriter, r *http.Request) {
	middleware.EnableCors(w)

	status := core.GetStatus()
	response := webStatusResponse{
		Online:             status.Online,
		ViewerCount:        status.ViewerCount,
		ServerTime:         time.Now(),
		LastConnectTime:    status.LastConnectTime,
		LastDisconnectTime: status.LastDisconnectTime,
		VersionNumber:      status.VersionNumber,
		StreamTitle:        status.StreamTitle,
	}

	w.Header().Set("Content-Type", "application/json")
	middleware.DisableCache(w)

	if err := json.NewEncoder(w).Encode(response); err != nil {
		InternalErrorHandler(w, err)
	}
}

type webStatusResponse struct {
	Online             bool            `json:"online"`
	ViewerCount        int             `json:"viewerCount"`
	ServerTime         time.Time       `json:"serverTime"`
	LastConnectTime    *utils.NullTime `json:"lastConnectTime"`
	LastDisconnectTime *utils.NullTime `json:"lastDisconnectTime"`

	VersionNumber string `json:"versionNumber"`
	StreamTitle   string `json:"streamTitle"`
}