package validation

type ExpenseQuery struct {
	Page                  int     `query:"page" validate:"omitempty,min=1,gt=0"`
	Limit                 int     `query:"limit" validate:"omitempty,min=1,max=100,gt=0"`
	Search                string  `query:"search" validate:"omitempty,max=100"`
	Category              string  `query:"category" validate:"omitempty,oneof=BOP NON-BOP"`
	SupplierId            int64   `query:"supplier_id" validate:"omitempty"`
	KandangId             int64   `query:"kandang_id" validate:"omitempty"`
	ProjectFlockKandangId int64   `query:"project_flock_kandang_id" validate:"omitempty"`
	ProjectFlockId        int64   `query:"project_flock_id" validate:"omitempty"`
	NonstockId            int64   `query:"nonstock_id" validate:"omitempty"`
	AreaId                int64   `query:"area_id" validate:"omitempty"`
	LocationId            int64   `query:"location_id" validate:"omitempty"`
	RealizationDate       string  `query:"realization_date" validate:"omitempty"`
	AllowedAreaIDs        []int64 `query:"-"`
	AllowedLocationIDs    []int64 `query:"-"`
}

type MarketingQuery struct {
	Page               int     `query:"page" validate:"omitempty,min=1,gt=0"`
	Limit              int     `query:"limit" validate:"omitempty,min=1,gt=0"`
	Search             string  `query:"search" validate:"omitempty,max=100"`
	CustomerId         int64   `query:"customer_id" validate:"omitempty"`
	ProductId          int64   `query:"product_id" validate:"omitempty"`
	WarehouseId        int64   `query:"warehouse_id" validate:"omitempty"`
	SalesPersonId      int64   `query:"sales_person_id" validate:"omitempty"`
	AreaId             int64   `query:"area_id" validate:"omitempty"`
	LocationId         int64   `query:"location_id" validate:"omitempty"`
	MarketingType      string  `query:"marketing_type" validate:"omitempty,oneof=ayam telur trading"`
	FilterBy           string  `query:"filter_by" validate:"omitempty,oneof= so_date realization_date"`
	StartDate          string  `query:"start_date" validate:"omitempty,datetime=2006-01-02"`
	EndDate            string  `query:"end_date" validate:"omitempty,datetime=2006-01-02"`
	SortBy             string  `query:"sort_by" validate:"omitempty,oneof=so_date realization_date customer warehouse product sales_person vehicle_number sales_amount hpp_amount qty average_weight total_weight sales_price hpp_price aging_days"`
	SortOrder          string  `query:"sort_order" validate:"omitempty,oneof=asc desc"`
	AllowedAreaIDs     []int64 `query:"-"`
	AllowedLocationIDs []int64 `query:"-"`
}

type PurchaseSupplierQuery struct {
	Page               int     `query:"page" validate:"omitempty,min=1,gt=0"`
	Limit              int     `query:"limit" validate:"omitempty,min=1,gt=0"`
	AreaIDs            []int64 `query:"-" validate:"omitempty,dive,gt=0"`
	SupplierIDs        []int64 `query:"-" validate:"omitempty,dive,gt=0"`
	ProductIDs         []int64 `query:"-" validate:"omitempty,dive,gt=0"`
	ProductCategoryIDs []int64 `query:"-" validate:"omitempty,dive,gt=0"`
	StartDate          string  `query:"start_date" validate:"omitempty"`
	EndDate            string  `query:"end_date" validate:"omitempty"`
	SortBy             string  `query:"sort_by" validate:"omitempty"`
	FilterBy           string  `query:"filter_by" validate:"omitempty"`
	AllowedAreaIDs     []int64 `query:"-"`
}

type DebtSupplierQuery struct {
	Page               int     `query:"page" validate:"omitempty,min=1,gt=0"`
	Limit              int     `query:"limit" validate:"omitempty,min=1,gt=0"`
	SupplierIDs        []int64 `query:"-" validate:"omitempty,dive,gt=0"`
	StartDate          string  `query:"start_date" validate:"omitempty,datetime=2006-01-02"`
	EndDate            string  `query:"end_date" validate:"omitempty,datetime=2006-01-02"`
	FilterBy           string  `query:"filter_by" validate:"omitempty,oneof=received_date po_date"`
	SortOrder          string  `query:"sort_order" validate:"omitempty,oneof=asc desc"`
	AllowedAreaIDs     []int64 `query:"-"`
	AllowedLocationIDs []int64 `query:"-"`
}

type HppPerKandangQuery struct {
	Page           int      `query:"page" validate:"omitempty,min=1,gt=0"`
	Limit          int      `query:"limit" validate:"omitempty,min=1,max=1000,gt=0"`
	Period         string   `query:"period" validate:"required"`
	ShowUnrecorded bool     `query:"show_unrecorded"`
	AreaIDs        []int64  `query:"-"`
	LocationIDs    []int64  `query:"-"`
	KandangIDs     []int64  `query:"-"`
	WeightMin      *float64 `query:"-"`
	WeightMax      *float64 `query:"-"`
}

type HppV2BreakdownQuery struct {
	ProjectFlockKandangID uint   `query:"project_flock_kandang_id" validate:"required,gt=0"`
	Period                string `query:"period" validate:"required,datetime=2006-01-02"`
}

type ExpenseDepreciationQuery struct {
	Page            int     `query:"page" validate:"omitempty,min=1,gt=0"`
	Limit           int     `query:"limit" validate:"omitempty,min=1,max=1000,gt=0"`
	Period          string  `query:"period" validate:"required,datetime=2006-01-02"`
	ForceRecompute  bool    `query:"force_recompute"`
	ProjectFlockIDs []int64 `query:"-"`
	AreaIDs         []int64 `query:"-"`
	LocationIDs     []int64 `query:"-"`
}

type ExpenseDepreciationManualInputUpsert struct {
	ProjectFlockID uint    `json:"project_flock_id" validate:"required,gt=0"`
	TotalCost      float64 `json:"total_cost" validate:"required,gte=0"`
	CutoverDate    string  `json:"cutover_date" validate:"required,datetime=2006-01-02"`
	Note           *string `json:"note" validate:"omitempty,max=1000"`
}

type ProductionResultQuery struct {
	Page                  int  `query:"page" validate:"omitempty,min=1,gt=0"`
	Limit                 int  `query:"limit" validate:"omitempty,min=1,gt=0"`
	ProjectFlockKandangID uint `query:"-" validate:"required,gt=0"`
}

type CustomerPaymentQuery struct {
	Page        int    `query:"page" validate:"omitempty,min=1,gt=0"`
	Limit       int    `query:"limit" validate:"omitempty,min=1,max=100,gt=0"`
	CustomerIDs []uint `query:"customer_ids" validate:"omitempty,dive,gt=0"`
	FilterBy    string `query:"filter_by" validate:"omitempty,oneof=TRANS_DATE REALIZATION_DATE"`
	StartDate   string `query:"start_date" validate:"omitempty,datetime=2006-01-02"`
	EndDate     string `query:"end_date" validate:"omitempty,datetime=2006-01-02"`
}
