package entities

import (
	"time"

	"github.com/google/uuid"
)

// PaymentMethodAnalytics represents payment method analytics data
type PaymentMethodAnalytics struct {
	PaymentMethodID   uuid.UUID `json:"payment_method_id"`
	PaymentMethodName string    `json:"payment_method_name"`
	PaymentMethodType string    `json:"payment_method_type"`
	TotalAmount       float64   `json:"total_amount"`
	OrderCount        int64     `json:"order_count"`
	PaymentCount      int64     `json:"payment_count"`
}

// SalesAnalytics represents sales analytics data
type SalesAnalytics struct {
	Date     time.Time `json:"date"`
	Sales    float64   `json:"sales"`
	Orders   int64     `json:"orders"`
	Items    int64     `json:"items"`
	Tax      float64   `json:"tax"`
	Discount float64   `json:"discount"`
	NetSales float64   `json:"net_sales"`
}

// ProductAnalytics represents product analytics data
type ProductAnalytics struct {
	ProductID    uuid.UUID `json:"product_id"`
	ProductName  string    `json:"product_name"`
	CategoryID   uuid.UUID `json:"category_id"`
	CategoryName string    `json:"category_name"`
	QuantitySold int64     `json:"quantity_sold"`
	Revenue      float64   `json:"revenue"`
	AveragePrice float64   `json:"average_price"`
	OrderCount   int64     `json:"order_count"`
}

// ProductAnalyticsPerCategory represents product analytics data grouped by category
type ProductAnalyticsPerCategory struct {
	CategoryID   uuid.UUID `json:"category_id"`
	CategoryName string    `json:"category_name"`
	TotalRevenue float64   `json:"total_revenue"`
	TotalQuantity int64    `json:"total_quantity"`
	ProductCount int64     `json:"product_count"`
	OrderCount   int64     `json:"order_count"`
}

// DashboardOverview represents dashboard overview data
type DashboardOverview struct {
	TotalSales        float64 `json:"total_sales"`
	TotalOrders       int64   `json:"total_orders"`
	AverageOrderValue float64 `json:"average_order_value"`
	TotalCustomers    int64   `json:"total_customers"`
	VoidedOrders      int64   `json:"voided_orders"`
	RefundedOrders    int64   `json:"refunded_orders"`
}

// ProfitLossAnalytics represents profit and loss analytics data
type ProfitLossAnalytics struct {
	Summary     ProfitLossSummary   `json:"summary"`
	Data        []ProfitLossData    `json:"data"`
	ProductData []ProductProfitData `json:"product_data"`
}

// ProfitLossSummary represents profit and loss summary data
type ProfitLossSummary struct {
	TotalRevenue       float64 `json:"total_revenue"`
	TotalCost          float64 `json:"total_cost"`
	GrossProfit        float64 `json:"gross_profit"`
	GrossProfitMargin  float64 `json:"gross_profit_margin"`
	TotalTax           float64 `json:"total_tax"`
	TotalDiscount      float64 `json:"total_discount"`
	NetProfit          float64 `json:"net_profit"`
	NetProfitMargin    float64 `json:"net_profit_margin"`
	TotalOrders        int64   `json:"total_orders"`
	AverageProfit      float64 `json:"average_profit"`
	ProfitabilityRatio float64 `json:"profitability_ratio"`
}

// ProfitLossData represents profit and loss data by time period
type ProfitLossData struct {
	Date              time.Time `json:"date"`
	Revenue           float64   `json:"revenue"`
	Cost              float64   `json:"cost"`
	GrossProfit       float64   `json:"gross_profit"`
	GrossProfitMargin float64   `json:"gross_profit_margin"`
	Tax               float64   `json:"tax"`
	Discount          float64   `json:"discount"`
	NetProfit         float64   `json:"net_profit"`
	NetProfitMargin   float64   `json:"net_profit_margin"`
	Orders            int64     `json:"orders"`
}

// ProductProfitData represents profit data for individual products
type ProductProfitData struct {
	ProductID         uuid.UUID `json:"product_id"`
	ProductName       string    `json:"product_name"`
	CategoryID        uuid.UUID `json:"category_id"`
	CategoryName      string    `json:"category_name"`
	QuantitySold      int64     `json:"quantity_sold"`
	Revenue           float64   `json:"revenue"`
	Cost              float64   `json:"cost"`
	GrossProfit       float64   `json:"gross_profit"`
	GrossProfitMargin float64   `json:"gross_profit_margin"`
	AveragePrice      float64   `json:"average_price"`
	AverageCost       float64   `json:"average_cost"`
	ProfitPerUnit     float64   `json:"profit_per_unit"`
}
