package flags // WIP import ( "embed" "encoding/json" "errors" "fmt" "git.tijl.dev/tijl/tijl.dev-core/modules/i18n" log "git.tijl.dev/tijl/tijl.dev-core/modules/logger" "git.tijl.dev/tijl/tijl.dev-core/modules/web" "github.com/gofiber/fiber/v2" ) var supportedTags []string var countryCodes []CountryCode type CountryCode struct { Code string `json:"code"` Tags []string `json:"tags"` } func filterCountriesByTags(tags []string) (error, []string) { var result []string for _, tag := range tags { isSupported := false for _, supportedTag := range supportedTags { if tag == supportedTag { isSupported = true } } if isSupported == false { return errors.New(fmt.Sprintf("unsupported tag %v", tag)), result } } for _, country := range countryCodes { for _, tag := range tags { for _, cTag := range country.Tags { if cTag == tag { result = append(result, country.Code) } } } } return nil, result } //go:embed locales/* data/* var Embed embed.FS func Setup() { i18n.RegisterTranslations(Embed, "locales") err := loadData() if err != nil { log.Error().Err(err).Msg("error loading country codes data file") } web.RegisterAppSetupFunc(func(a *fiber.App) { a.Get("/app/flags", func(c *fiber.Ctx) error { if c.Cookies("app_flags_game_session") != "" { return questionHandler(c, NewGameUUID{}) } else { return EntryPageHandler(c) } }) a.Post("/app/flags", func(c *fiber.Ctx) error { recType := c.FormValue("type") switch recType { case "start": return startNewGameHandler(c) case "answer": return answerHandler(c) case "exit": return stopGameHandler(c) } return nil }) }, 1000) } func loadData() error { countryCodesData, err := Embed.ReadFile("data/country_codes.json") if err != nil { return err } countryCodes = []CountryCode{} err = json.Unmarshal(countryCodesData, &countryCodes) if err != nil { return err } tagsData, err := Embed.ReadFile("data/tags.json") if err != nil { return err } supportedTags = []string{} err = json.Unmarshal(tagsData, &supportedTags) if err != nil { return err } return nil } func EntryPageHandler(c *fiber.Ctx) error { data := *web.Common(c) data["Title"] = "tmp" data["SupportedTags"] = supportedTags return c.Render("apps/flags/start", data, "layouts/base") }