package reference

// === REFERENSI MODELS ===

// ReferensiRequest represents referensi lookup request
type ReferensiRequest struct {
	BaseRequest
	JenisReferensi string `json:"jenis_referensi" validate:"required,oneof=diagnosa procedure obat alkes faskes dokter poli"`
	Keyword        string `json:"keyword,omitempty"`
	KodeReferensi  string `json:"kode_referensi,omitempty"`
	PaginationRequest
}

// ReferensiData represents referensi information
type ReferensiData struct {
	Kode        string `json:"kode"`
	Nama        string `json:"nama"`
	Kategori    string `json:"kategori,omitempty"`
	Status      string `json:"status"`
	TglBerlaku  string `json:"tgl_berlaku,omitempty"`
	TglBerakhir string `json:"tgl_berakhir,omitempty"`
	Keterangan  string `json:"keterangan,omitempty"`
}

// ReferensiResponse represents referensi API response
type ReferensiResponse struct {
	BaseResponse
	Data       []ReferensiData     `json:"data,omitempty"`
	Pagination *PaginationResponse `json:"pagination,omitempty"`
}

// === MONITORING MODELS ===

// MonitoringRequest represents monitoring data request
type MonitoringRequest struct {
	BaseRequest
	TanggalAwal  string `json:"tanggal_awal" validate:"required"`
	TanggalAkhir string `json:"tanggal_akhir" validate:"required"`
	JenisLaporan string `json:"jenis_laporan" validate:"required,oneof=kunjungan klaim rujukan sep"`
	PPK          string `json:"ppk,omitempty"`
	StatusData   string `json:"status_data,omitempty"`
	PaginationRequest
}

// MonitoringData represents monitoring information
type MonitoringData struct {
	Tanggal     string  `json:"tanggal"`
	PPK         string  `json:"ppk"`
	NamaPPK     string  `json:"nama_ppk"`
	JumlahKasus int     `json:"jumlah_kasus"`
	TotalTarif  float64 `json:"total_tarif"`
	StatusData  string  `json:"status_data"`
	Keterangan  string  `json:"keterangan,omitempty"`
}

// MonitoringResponse represents monitoring API response
type MonitoringResponse struct {
	BaseResponse
	Data       []MonitoringData    `json:"data,omitempty"`
	Summary    *MonitoringSummary  `json:"summary,omitempty"`
	Pagination *PaginationResponse `json:"pagination,omitempty"`
}

// MonitoringSummary represents monitoring summary
type MonitoringSummary struct {
	TotalKasus     int     `json:"total_kasus"`
	TotalTarif     float64 `json:"total_tarif"`
	RataRataTarif  float64 `json:"rata_rata_tarif"`
	PeriodeLaporan string  `json:"periode_laporan"`
}
