package auth

import (
	"api_yal/internal/logger"
	"api_yal/internal/middleware"
	"api_yal/internal/repository"
	"time"

	"github.com/go-chi/chi/v5"
	"gorm.io/gorm"
)

// RegisterRoutes регистрирует маршруты аутентификации
func RegisterRoutes(r chi.Router, db *gorm.DB, jwtSecret string) {
	l := logger.Get()
	l.Debug("Регистрация маршрутов для auth.go")
	// Создаем репозиторий и сервис
	accountRepo := repository.NewAccountRepository(db)
	
	// Конфигурация токенов
	authConfig := AuthServiceConfig{
		JWTSecret:       jwtSecret,
		AccessTokenTTL:  15 * time.Minute,  // Access token живет 15 минут
		RefreshTokenTTL: 7 * 24 * time.Hour, // Refresh token живет 7 дней
	}
	
	authService := NewAuthService(accountRepo, authConfig)
	handler := NewAuthHandler(authService)

	l.Debug("Регистрация маршрутов аутентификации")

	r.Route("/auth", func(r chi.Router) {
		// Публичные маршруты (без аутентификации)
		r.Group(func(r chi.Router) {
			r.Post("/login", handler.Login)
			r.Post("/register", handler.Register)
			r.Post("/refresh", handler.RefreshToken)
			r.Post("/reset-password", handler.RequestPasswordReset)
			r.Post("/reset-password/confirm", handler.ConfirmPasswordReset)
			r.Post("/mobile/login", handler.MobileLogin) // Для мобильных приложений
		})

		// Защищенные маршруты (требуют аутентификации)
		r.Group(func(r chi.Router) {
			r.Use(middleware.AuthMiddleware(jwtSecret))

			r.Post("/logout", handler.Logout)
			r.Post("/change-password", handler.RequestPasswordReset)
		})
	})
}
