package renderer
import (
	"encoding/json"
	"html/template"
	"net/http"
	fleetsstorage "git.coopgo.io/coopgo-platform/fleets/storage"
	mobilityaccountsstorage "git.coopgo.io/coopgo-platform/mobility-accounts/storage"
)
const beneficiariesMenu = "beneficiaries"
type BeneficiariesListState struct {
	Count         int                               `json:"count"`
	CacheId       string                            `json:"cache_id"`
	Beneficiaries []mobilityaccountsstorage.Account `json:"beneficiaries"`
	Archived      bool                              `json:"archived"`
}
func (s BeneficiariesListState) JSON() template.JS {
	result, _ := json.Marshal(s)
	return template.JS(result)
}
func (s BeneficiariesListState) JSONWithLimits(a int, b int) template.JS {
	if b < len(s.Beneficiaries) {
		s.Beneficiaries = s.Beneficiaries[a:b]
	}
	return s.JSON()
}
func (renderer *Renderer) BeneficiariesList(w http.ResponseWriter, r *http.Request, accounts []mobilityaccountsstorage.Account, cacheid string, archived bool) {
	files := renderer.ThemeConfig.GetStringSlice("views.beneficiaries.list.files")
	state := NewState(r, renderer.ThemeConfig, beneficiariesMenu)
	state.ViewState = BeneficiariesListState{
		Count:         len(accounts),
		CacheId:       cacheid,
		Beneficiaries: accounts,
		Archived:      archived,
	}
	renderer.Render("beneficiaries_list", w, r, files, state)
}
func (renderer *Renderer) BeneficiaryCreate(w http.ResponseWriter, r *http.Request) {
	files := renderer.ThemeConfig.GetStringSlice("views.beneficiaries.create.files")
	profileFields := renderer.GlobalConfig.Get("modules.beneficiaries.profile_optional_fields")
	state := NewState(r, renderer.ThemeConfig, beneficiariesMenu)
	state.ViewState = map[string]any{
		"profile_optional_fields": profileFields,
	}
	renderer.Render("beneficiaries_create", w, r, files, state)
}
type BeneficiariesDisplayState struct {
	Beneficiary any
}
func (renderer *Renderer) BeneficiaryDisplay(w http.ResponseWriter, r *http.Request, beneficiary any, bookings []fleetsstorage.Booking, organizations []any, beneficiaries_file_types []string, file_types_map map[string]string, documents any, event interface{}, solidarityTransportStats any, solidarityTransportBookings any, solidarityDriversMap any, organizedCarpoolStats any, organizedCarpoolBookings any, organizedCarpoolDriversMap any, walletBalance float64, tab string) {
	files := renderer.ThemeConfig.GetStringSlice("views.beneficiaries.display.files")
	profileFields := renderer.GlobalConfig.Get("modules.beneficiaries.profile_optional_fields")
	state := NewState(r, renderer.ThemeConfig, beneficiariesMenu)
	state.ViewState = map[string]any{
		"beneficiary":                       beneficiary,
		"bookings":                          bookings,
		"beneficiaries_file_types":          beneficiaries_file_types,
		"file_types_map":                    file_types_map,
		"documents":                         documents,
		"organizations":                     organizations,
		"event":                             event,
		"solidarity_transport_stats":        solidarityTransportStats,
		"solidarity_transport_bookings":     solidarityTransportBookings,
		"solidarity_transport_drivers_map":  solidarityDriversMap,
		"organized_carpool_stats":           organizedCarpoolStats,
		"organized_carpool_bookings":        organizedCarpoolBookings,
		"organized_carpool_drivers_map":     organizedCarpoolDriversMap,
		"profile_optional_fields":           profileFields,
		"wallet_balance":                    walletBalance,
		"tab":                               tab,
		"search_view":                       renderer.GlobalConfig.GetString("modules.journeys.search_view"),
	}
	renderer.Render("beneficiaries_display", w, r, files, state)
}
func (renderer *Renderer) BeneficiaryUpdate(w http.ResponseWriter, r *http.Request, beneficiary any) {
	files := renderer.ThemeConfig.GetStringSlice("views.beneficiaries.update.files")
	profileFields := renderer.GlobalConfig.Get("modules.beneficiaries.profile_optional_fields")
	state := NewState(r, renderer.ThemeConfig, beneficiariesMenu)
	state.ViewState = map[string]any{
		"beneficiary":             beneficiary,
		"profile_optional_fields": profileFields,
	}
	renderer.Render("beneficiaries_update", w, r, files, state)
}