// models/user_stats.go
package models

import (
	"time"
	
	"gorm.io/gorm"
)

type UserStats struct {
	ID             uint      `json:"id" gorm:"primaryKey"`
	UserID         uint      `json:"user_id" gorm:"uniqueIndex;not null"`
	TotalDistance  float64   `json:"total_distance" gorm:"type:decimal(10,2);default:0"`    // Общий пробег в км
	TotalTime      int       `json:"total_time" gorm:"default:0"`                           // Общее время в минутах
	AvgPace        string    `json:"avg_pace" gorm:"size:20"`                               // Средний темп
	WorkoutsCount  int       `json:"workouts_count" gorm:"default:0"`                       // Количество тренировок
	CurrentStreak  int       `json:"current_streak" gorm:"default:0"`                        // Текущая серия дней подряд
	LongestStreak  int       `json:"longest_streak" gorm:"default:0"`                       // Самая длинная серия
	WeeklyDistance float64   `json:"weekly_distance" gorm:"type:decimal(8,2);default:0"`    // Пробег за неделю
	MonthlyDistance float64  `json:"monthly_distance" gorm:"type:decimal(8,2);default:0"`   // Пробег за месяц
	Best5K         string    `json:"best_5k" gorm:"size:20"`                               // Лучший результат на 5к
	Best10K        string    `json:"best_10k" gorm:"size:20"`                              // Лучший результат на 10к
	BestHalf       string    `json:"best_half" gorm:"size:20"`                             // Лучший результат на полумарафон
	BestMarathon   string    `json:"best_marathon" gorm:"size:20"`                         // Лучший результат на марафон
	LastWorkout    time.Time `json:"last_workout"`                                         // Последняя тренировка
	CreatedAt      time.Time `json:"created_at"`
	UpdatedAt      time.Time `json:"updated_at"`

	// Связи
	User User `json:"user,omitempty" gorm:"foreignKey:UserID"`
}

// BeforeCreate hook
func (us *UserStats) BeforeCreate(tx *gorm.DB) error {
	if us.CreatedAt.IsZero() {
		us.CreatedAt = time.Now()
	}
	if us.UpdatedAt.IsZero() {
		us.UpdatedAt = time.Now()
	}
	return nil
}

// BeforeUpdate hook
func (us *UserStats) BeforeUpdate(tx *gorm.DB) error {
	us.UpdatedAt = time.Now()
	return nil
}

// DTO для статистики пользователя
type UserStatsResponse struct {
	TotalDistance  float64 `json:"total_distance"`
	TotalTime      int     `json:"total_time"`
	AvgPace        string  `json:"avg_pace"`
	WorkoutsCount  int     `json:"workouts_count"`
	CurrentStreak  int     `json:"current_streak"`
	LongestStreak  int     `json:"longest_streak"`
	WeeklyDistance float64 `json:"weekly_distance"`
	MonthlyDistance float64 `json:"monthly_distance"`
	PersonalBests  PersonalBestsSummary `json:"personal_bests"`
}