package server

import (
	"studia/internal/auth"
	"studia/internal/config"
	"studia/internal/database"
	"studia/internal/logger"
	"time"

	"github.com/gin-contrib/cors"
	"github.com/gin-gonic/gin"
)

func StartServer(cfg *config.Config) {

	router := gin.Default()

	db := database.New(cfg)

	// 2. CORS-Konfiguration
	// Lese die Frontend-URL aus den Umgebungsvariablen
	// frontendURL := os.Getenv("FRONTEND_URL")

	// Lokaler Fallback (wichtig für die Entwicklung)
	allowedOrigins := []string{
		"http://localhost:5173", // Gängiger Vite-Dev-Port
		"http://127.0.0.1:5173",
	}

	if cfg.FrontendURL != "" {
		allowedOrigins = append(allowedOrigins, cfg.FrontendURL)
		logger.Log.Printf("CORS: Erlaubte Produktiv-URL hinzugefügt: %s\n", cfg.FrontendURL)
	} else {
		logger.Log.Error().Msg("ACHTUNG: FRONTEND_URL fehlt in den Umgebungsvariablen. Nur lokale URLs erlaubt.")
	}

	// CORS
	// Konfiguriere die CORS-Middleware
	config := cors.Config{
		// Setze die erlaubten Ursprünge (deine React-URLs)
		AllowOrigins: allowedOrigins,
		// Erlaube die notwendigen HTTP-Methoden
		AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"},
		// Erlaube Header (z.B. für JSON und Authentifizierung)
		AllowHeaders: []string{"Origin", "Content-Type", "Accept", "Authorization"},
		// Erlaube Cookies und Credentials (falls du Tokens oder Sessions nutzt)
		AllowCredentials: true,
		// Wie lange die Preflight-Anfrage (OPTIONS) gecacht werden darf
		MaxAge: 12 * time.Hour,
	}
	router.Use(cors.New(config))

	router.POST("/login", func(c *gin.Context) {
		err := auth.Login(c, db)
		if err != nil {
			logger.Log.Error().Msg(err.Error())
		}
	})

	router.POST("/register", func(c *gin.Context) {
		er := auth.Register(c, db)
		if er != nil {
			logger.Log.Error().Msg("register error")
		}

	})

	router.Run(":" + cfg.Port)

}
