package main

import (
	"log"
	"net/http"
	"os"

	"github.com/go-chi/chi/v5"
	"github.com/go-chi/chi/v5/middleware"
	"github.com/go-chi/cors"
	"github.com/joho/godotenv"

	"nitipabsen/backend/config"
	authmiddleware "nitipabsen/backend/middleware"
	"nitipabsen/backend/models"
	"nitipabsen/backend/routes"
)

func main() {
	if err := godotenv.Load(); err != nil {
		log.Println(".env file not found, using environment variables")
	}
	if err := config.InitDB(); err != nil {
		log.Fatalf("database initialization failed: %v", err)
	}
	// Penambahan model SavedPeriod sudah dipertahankan
	if err := config.DB.AutoMigrate(&models.User{}, &models.Attendance{}, &models.SavedPeriod{}); err != nil {
		log.Fatalf("migration failed: %v", err)
	}
	if err := config.RemoveLegacyEmailColumn(); err != nil {
		log.Fatalf("legacy email cleanup failed: %v", err)
	}
	log.Println("Database migration completed")
	authmiddleware.SetJWTSecret(os.Getenv("JWT_SECRET"))

	r := chi.NewRouter()
	r.Use(middleware.Logger)
	r.Use(middleware.Recoverer)
	
	// Perbaikan format domain pada AllowedOrigins
	r.Use(cors.Handler(cors.Options{
		AllowedOrigins:   []string{"http://localhost:5173", "http://127.0.0.1:5173", "https://nitipabsen.efkode.my.id"},
		AllowedMethods:   []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
		AllowedHeaders:   []string{"Accept", "Authorization", "Content-Type"},
		AllowCredentials: true,
		MaxAge:           300,
	}))
	routes.SetupRoutes(r)
	
	// Perbaikan variabel GO_PORT dan angka port agar sinkron dengan app.js
	port := os.Getenv("GO_PORT")
	if port == "" {
		port = "5005"
	}
	log.Printf("Server running on http://127.0.0.1:%s", port)
	log.Fatal(http.ListenAndServe(":"+port, r))
}