package entities

import "time"

// Counter represents a counter entity
type Counter struct {
	ID          int       `json:"id" db:"id"`
	UserID      int       `json:"user_id" db:"user_id"`
	Name        string    `json:"name" db:"name"`
	Description string    `json:"description" db:"description"`
	CreatedAt   time.Time `json:"created_at" db:"created_at"`
	UpdatedAt   time.Time `json:"updated_at" db:"updated_at"`
}

// CounterEntry represents a single increment/decrement entry
type CounterEntry struct {
	ID        int       `json:"id" db:"id"`
	CounterID int       `json:"counter_id" db:"counter_id"`
	Value     int       `json:"value" db:"value"` // +1 for increment, -1 for decrement
	Date      time.Time `json:"date" db:"date"`
	CreatedAt time.Time `json:"created_at" db:"created_at"`
}

// CounterWithStats represents a counter with aggregated statistics
type CounterWithStats struct {
	Counter
	TotalValue int `json:"total_value"`
	TodayValue int `json:"today_value"`
	WeekValue  int `json:"week_value"`
	MonthValue int `json:"month_value"`
	EntryCount int `json:"entry_count"`
}

// DailyStat represents daily statistics for a counter
type DailyStat struct {
	Date  time.Time `json:"date"`
	Total int       `json:"total"`
}

// Validate validates counter data
func (c *Counter) Validate() error {
	if c.Name == "" {
		return ErrInvalidCounterName
	}
	if c.UserID <= 0 {
		return ErrInvalidUserID
	}
	return nil
}

// Validate validates counter entry data
func (ce *CounterEntry) Validate() error {
	if ce.CounterID <= 0 {
		return ErrInvalidCounterID
	}
	if ce.Value == 0 {
		return ErrInvalidEntryValue
	}
	return nil
}
