package domain

import "time"

type AnalyticsLabelCount struct {
	Label string `json:"label"`
	Count int64  `json:"count"`
}

type AnalyticsLabelAmount struct {
	Label  string  `json:"label"`
	Count  int64   `json:"count"`
	Amount float64 `json:"amount"`
}

type AnalyticsRevenueByPlan struct {
	PlanName string  `json:"plan_name"`
	Currency string  `json:"currency"`
	Revenue  float64 `json:"revenue"`
}

type AnalyticsTimePoint struct {
	Date  time.Time `json:"date"`
	Count int64     `json:"count"`
}

type AnalyticsRevenueTimePoint struct {
	Date    time.Time `json:"date"`
	Revenue float64   `json:"revenue"`
}

type AnalyticsUsersSection struct {
	TotalUsers int64 `json:"total_users"`
	NewToday   int64 `json:"new_today"`
	NewWeek    int64 `json:"new_week"`
	NewMonth   int64 `json:"new_month"`

	ByRole           []AnalyticsLabelCount `json:"by_role"`
	ByStatus         []AnalyticsLabelCount `json:"by_status"`
	ByAgeGroup       []AnalyticsLabelCount `json:"by_age_group"`
	ByKnowledgeLevel []AnalyticsLabelCount `json:"by_knowledge_level"`
	ByRegion         []AnalyticsLabelCount `json:"by_region"`

	RegistrationsLast30Days []AnalyticsTimePoint `json:"registrations_last_30_days"`
}

type AnalyticsSubscriptionsSection struct {
	TotalSubscriptions  int64 `json:"total_subscriptions"`
	ActiveSubscriptions int64 `json:"active_subscriptions"`
	NewToday            int64 `json:"new_today"`
	NewWeek             int64 `json:"new_week"`
	NewMonth            int64 `json:"new_month"`

	ByStatus      []AnalyticsLabelCount    `json:"by_status"`
	RevenueByPlan []AnalyticsRevenueByPlan `json:"revenue_by_plan"`

	NewSubscriptionsLast30Days []AnalyticsTimePoint `json:"new_subscriptions_last_30_days"`
}

type AnalyticsPaymentsSection struct {
	TotalRevenue        float64 `json:"total_revenue"`
	AvgTransactionValue float64 `json:"avg_transaction_value"`
	TotalPayments       int64   `json:"total_payments"`
	SuccessfulPayments  int64   `json:"successful_payments"`

	ByStatus []AnalyticsLabelAmount `json:"by_status"`
	ByMethod []AnalyticsLabelAmount `json:"by_method"`

	RevenueLast30Days []AnalyticsRevenueTimePoint `json:"revenue_last_30_days"`
}

type AnalyticsCoursesSection struct {
	TotalCategories int64 `json:"total_categories"`
	TotalCourses    int64 `json:"total_courses"`
	TotalSubCourses int64 `json:"total_sub_courses"`
	TotalVideos     int64 `json:"total_videos"`
}

type AnalyticsContentSection struct {
	TotalQuestions    int64 `json:"total_questions"`
	TotalQuestionSets int64 `json:"total_question_sets"`

	QuestionsByType    []AnalyticsLabelCount `json:"questions_by_type"`
	QuestionSetsByType []AnalyticsLabelCount `json:"question_sets_by_type"`
}

type AnalyticsNotificationsSection struct {
	TotalSent   int64 `json:"total_sent"`
	ReadCount   int64 `json:"read_count"`
	UnreadCount int64 `json:"unread_count"`

	ByChannel []AnalyticsLabelCount `json:"by_channel"`
	ByType    []AnalyticsLabelCount `json:"by_type"`
}

type AnalyticsIssuesSection struct {
	TotalIssues    int64   `json:"total_issues"`
	ResolvedIssues int64   `json:"resolved_issues"`
	ResolutionRate float64 `json:"resolution_rate"`

	ByStatus []AnalyticsLabelCount `json:"by_status"`
	ByType   []AnalyticsLabelCount `json:"by_type"`
}

type AnalyticsTeamSection struct {
	TotalMembers int64                 `json:"total_members"`
	ByRole       []AnalyticsLabelCount `json:"by_role"`
	ByStatus     []AnalyticsLabelCount `json:"by_status"`
}

type AnalyticsDashboard struct {
	GeneratedAt   time.Time                     `json:"generated_at"`
	Users         AnalyticsUsersSection         `json:"users"`
	Subscriptions AnalyticsSubscriptionsSection `json:"subscriptions"`
	Payments      AnalyticsPaymentsSection      `json:"payments"`
	Courses       AnalyticsCoursesSection       `json:"courses"`
	Content       AnalyticsContentSection       `json:"content"`
	Notifications AnalyticsNotificationsSection `json:"notifications"`
	Issues        AnalyticsIssuesSection        `json:"issues"`
	Team          AnalyticsTeamSection          `json:"team"`
}
