package salestargets

import (
	"github.com/shopspring/decimal"
)

// SalesTarget represents a tiered target for sales hierarchy (GM, BM, SPV, Sales Lapangan).
type SalesTarget struct {
	ID             int64           `json:"id"`
	Period         string          `json:"period"` // YYYY-MM
	RoleLevel      string          `json:"role_level"` // gm, bm, spv, sales
	UserID         *int64          `json:"user_id"`
	UserName       string          `json:"user_name,omitempty"`
	ScopeLevel     string          `json:"scope_level"` // kota, kecamatan, kelurahan, desa
	ScopeName      string          `json:"scope_name"`
	TargetAmount   decimal.Decimal `json:"target_amount"`
	TargetOrders   int             `json:"target_orders"`
	TargetVisits   int             `json:"target_visits"`
	AchievedAmount decimal.Decimal `json:"achieved_amount"`
	AchievedOrders int             `json:"achieved_orders"`
	AchievedVisits int             `json:"achieved_visits"`
	AchievementPct float64         `json:"achievement_pct"`
	Notes          string          `json:"notes"`
	CreatedBy      *int64          `json:"created_by"`
	CreatedAt      string          `json:"created_at"`
	UpdatedAt      string          `json:"updated_at"`
}

// TargetInput is the payload to create or update a target.
type TargetInput struct {
	Period       string          `json:"period"`
	RoleLevel    string          `json:"role_level"`
	UserID       *int64          `json:"user_id"`
	ScopeLevel   string          `json:"scope_level"`
	ScopeName    string          `json:"scope_name"`
	TargetAmount decimal.Decimal `json:"target_amount"`
	TargetOrders int             `json:"target_orders"`
	TargetVisits int             `json:"target_visits"`
	Notes        string          `json:"notes"`
}

// LevelSummary captures aggregate performance per hierarchy level.
type LevelSummary struct {
	RoleLevel      string          `json:"role_level"`
	ScopeLevel     string          `json:"scope_level"`
	TargetCount    int             `json:"target_count"`
	TargetAmount   decimal.Decimal `json:"target_amount"`
	AchievedAmount decimal.Decimal `json:"achieved_amount"`
	AchievementPct float64         `json:"achievement_pct"`
	TargetOrders   int             `json:"target_orders"`
	AchievedOrders int             `json:"achieved_orders"`
	TargetVisits   int             `json:"target_visits"`
	AchievedVisits int             `json:"achieved_visits"`
}
