// internal/database/models.go
package database

import (
	"time"
)

type Activity struct {
	ID           int       `json:"id"`
	ActivityID   int       `json:"activity_id"`
	StartTime    time.Time `json:"start_time"`
	ActivityType string    `json:"activity_type"`
	Duration     int       `json:"duration"`      // in seconds
	Distance     float64   `json:"distance"`      // in meters
	MaxHeartRate int       `json:"max_heart_rate"`
	AvgHeartRate int       `json:"avg_heart_rate"`
	AvgPower     float64   `json:"avg_power"`
	Calories     int       `json:"calories"`
	Steps        int       `json:"steps"`
	ElevationGain float64  `json:"elevation_gain"`
	StartLatitude float64  `json:"start_latitude"`
	StartLongitude float64 `json:"start_longitude"`
	Filename     string    `json:"filename"`
	FileType     string    `json:"file_type"`
	FileSize     int64     `json:"file_size"`
	Downloaded   bool      `json:"downloaded"`
	CreatedAt    time.Time `json:"created_at"`
	LastSync     time.Time `json:"last_sync"`
}

type Stats struct {
    Total      int `json:"total"`
    Downloaded int `json:"downloaded"`
    Missing    int `json:"missing"`
}

type DaemonConfig struct {
    ID           int    `json:"id"`
    Enabled      bool   `json:"enabled"`
    ScheduleCron string `json:"schedule_cron"`
    LastRun      string `json:"last_run"`
    Status       string `json:"status"`
}

// Database interface
type Database interface {
    // Activities
    GetActivities(limit, offset int) ([]Activity, error)
    GetActivity(activityID int) (*Activity, error)
    CreateActivity(activity *Activity) error
    UpdateActivity(activity *Activity) error
    DeleteActivity(activityID int) error
    
    // Stats
    GetStats() (*Stats, error)
    
    // Search and filter
    FilterActivities(filters ActivityFilters) ([]Activity, error)
    
    // Close connection
    Close() error
}

type ActivityFilters struct {
    ActivityType string
    DateFrom     *time.Time
    DateTo       *time.Time
    MinDistance  float64
    MaxDistance  float64
    MinDuration  int
    MaxDuration  int
    Downloaded   *bool
    Limit        int
    Offset       int
    SortBy       string
    SortOrder    string
}
