package main

import (
	"log"
	"os"

	"gitlab.com/dynaweb/ains-microservices/internal/edge"
	"gitlab.com/dynaweb/ains-microservices/pkg/config"
	"gitlab.com/dynaweb/ains-microservices/pkg/i18n"
	"gitlab.com/dynaweb/ains-microservices/pkg/jwt"
	"gitlab.com/dynaweb/ains-microservices/pkg/middleware"
	"gitlab.com/dynaweb/ains-microservices/web"
)

func main() {
	if len(os.Args) > 1 && os.Args[1] == "healthcheck" {
		if err := middleware.Healthcheck(); err != nil {
			log.Fatalf("healthcheck: %v", err)
		}
		return
	}

	cfg, err := config.Load()
	if err != nil {
		log.Fatalf("config: %v", err)
	}

	translator := i18n.New(cfg.I18n.DefaultLanguage)
	if err := web.LoadMessages(translator); err != nil {
		log.Fatalf("i18n: %v", err)
	}

	view, err := web.NewView(translator)
	if err != nil {
		log.Fatalf("view: %v", err)
	}

	handler, err := edge.NewHandler(view, cfg, jwt.NewManager(cfg), translator)
	if err != nil {
		log.Fatalf("handler: %v", err)
	}

	r := middleware.NewRouter(cfg, "edge")
	if err := handler.Register(r); err != nil {
		log.Fatalf("register: %v", err)
	}

	log.Printf("edge listening on %s", cfg.HTTP.Addr)
	if err := r.Run(cfg.HTTP.Addr); err != nil {
		log.Fatalf("edge: %v", err)
	}
}
