package server

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

// handleSessionCheck verifies the session is valid and returns session info.
func (s *Server) handleSessionCheck(w http.ResponseWriter, r *http.Request) {
	sess := GetSession(r)
	if sess == nil {
		if cookie, err := r.Cookie("session_id"); err == nil && cookie.Value != "" {
			sess = s.sessions.Get(cookie.Value)
		}
	}
	if sess == nil {
		s.writeJSONRPC(w, nil, nil, &RPCError{
			Code: 100, Message: "Session expired",
		})
		return
	}
	s.writeJSONRPC(w, nil, s.buildSessionInfo(sess), nil)
}

// handleSessionModules returns installed module names.
func (s *Server) handleSessionModules(w http.ResponseWriter, r *http.Request) {
	s.writeJSONRPC(w, nil, []string{
		"base", "web", "contacts", "sale", "account", "stock",
		"purchase", "crm", "hr", "project", "fleet", "product", "l10n_de",
	}, nil)
}

// handleManifest returns a minimal PWA manifest.
func (s *Server) handleManifest(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/manifest+json")
	json.NewEncoder(w).Encode(map[string]interface{}{
		"name":             "Odoo",
		"short_name":       "Odoo",
		"start_url":        "/web",
		"display":          "standalone",
		"background_color": "#71639e",
		"theme_color":      "#71639e",
		"icons": []map[string]string{
			{"src": "/web/static/img/odoo-icon-192x192.png", "sizes": "192x192", "type": "image/png"},
		},
	})
}

// handleBootstrapTranslations returns empty translations for initial boot.
func (s *Server) handleBootstrapTranslations(w http.ResponseWriter, r *http.Request) {
	s.writeJSONRPC(w, nil, map[string]interface{}{
		"lang": "en_US",
		"hash": "empty",
		"lang_parameters": map[string]interface{}{
			"direction":    "ltr",
			"date_format":  "%%m/%%d/%%Y",
			"time_format":  "%%H:%%M:%%S",
			"grouping":     "[3,0]",
			"decimal_point": ".",
			"thousands_sep": ",",
			"week_start":   1,
		},
		"modules":    map[string]interface{}{},
		"multi_lang": false,
	}, nil)
}
