package db

import "time"

// BusinessUserActivityDaily records one active-user row per UTC day.
type BusinessUserActivityDaily struct {
	ID        uint   `gorm:"primaryKey;autoIncrement"`
	Day       string `gorm:"size:10;not null;uniqueIndex:idx_business_user_activity_day_user"`
	UserID    uint   `gorm:"not null;index;uniqueIndex:idx_business_user_activity_day_user"`
	User      User   `gorm:"foreignKey:UserID"`
	CreatedAt time.Time
	UpdatedAt time.Time
}

// BusinessRepoActivityDaily records one active-repository row per UTC day.
type BusinessRepoActivityDaily struct {
	ID           uint       `gorm:"primaryKey;autoIncrement"`
	Day          string     `gorm:"size:10;not null;uniqueIndex:idx_business_repo_activity_day_repo"`
	RepositoryID uint       `gorm:"not null;index;uniqueIndex:idx_business_repo_activity_day_repo"`
	Repository   Repository `gorm:"foreignKey:RepositoryID"`
	CreatedAt    time.Time
	UpdatedAt    time.Time
}

// BusinessFirstUserAction records the first time a user reaches an activation action.
type BusinessFirstUserAction struct {
	ID         uint      `gorm:"primaryKey;autoIncrement"`
	UserID     uint      `gorm:"not null;index;uniqueIndex:idx_business_first_user_action"`
	User       User      `gorm:"foreignKey:UserID"`
	Action     string    `gorm:"size:64;not null;uniqueIndex:idx_business_first_user_action"`
	OccurredAt time.Time `gorm:"not null;index"`
	CreatedAt  time.Time
}

// BusinessFirstRepoAction records the first time a repository reaches an activation action.
type BusinessFirstRepoAction struct {
	ID           uint       `gorm:"primaryKey;autoIncrement"`
	RepositoryID uint       `gorm:"not null;index;uniqueIndex:idx_business_first_repo_action"`
	Repository   Repository `gorm:"foreignKey:RepositoryID"`
	Action       string     `gorm:"size:64;not null;uniqueIndex:idx_business_first_repo_action"`
	OccurredAt   time.Time  `gorm:"not null;index"`
	CreatedAt    time.Time
}
