// Package main provides the dance-lessons-coach server entry point
//
//	@title			dance-lessons-coach API
//	@version		1.2.0
//	@description	API for dance-lessons-coach service providing greeting functionality
//	@termsOfService	http://swagger.io/terms/

//	@contact.name	API Support
//	@contact.url	http://www.arcodange.fr/support
//	@contact.email	support@arcodange.fr

//	@license.name	MIT
//	@license.url	https://opensource.org/licenses/MIT

//	@host						localhost:8080
//	@BasePath					/api
//	@schemes					http https
//
//	@securityDefinitions.apikey	ApiKeyAuth
//	@in							header
//	@name						Authorization
//	@description				JWT authentication using Bearer token. Format: Bearer <token>

package main

import (
	"context"
	"fmt"
	"os"

	"dance-lessons-coach/pkg/config"
	"dance-lessons-coach/pkg/server"
	"dance-lessons-coach/pkg/version"

	"github.com/rs/zerolog/log"
)

func main() {
	// Check for version flag first (before config loading)
	if len(os.Args) > 1 && (os.Args[1] == "--version" || os.Args[1] == "-version") {
		fmt.Println(version.Full())
		os.Exit(0)
	}

	// Load configuration (this will also setup logging)
	cfg, err := config.LoadConfig()
	if err != nil {
		log.Fatal().Err(err).Msg("Failed to load configuration")
	}

	// Create readiness context to control readiness state
	readyCtx, readyCancel := context.WithCancel(context.Background())
	defer readyCancel()

	// Create and run server
	server := server.NewServer(cfg, readyCtx)
	if err := server.Run(); err != nil {
		log.Fatal().Err(err).Msg("Server failed")
	}
}
