// internal/models/reference/vclaim.go
package reference

// === PESERTA MODELS ===

// PesertaRequest represents peserta lookup request
type PesertaRequest struct {
	BaseRequest
	NoKartu    string `json:"nokartu" validate:"required,min=13,max=13"`
	NIK        string `json:"nik,omitempty" validate:"omitempty,min=16,max=16"`
	TanggalSEP string `json:"tglsep" validate:"required" example:"2024-01-15"`
	NoTelepon  string `json:"notelp,omitempty" validate:"omitempty,max=15"`
}

// PesertaData represents peserta information from BPJS
type PesertaData struct {
	NoKartu          string `json:"noKartu"`
	NIK              string `json:"nik"`
	Nama             string `json:"nama"`
	Pisa             string `json:"pisa"`
	Sex              string `json:"sex"`
	TanggalLahir     string `json:"tglLahir"`
	TelephoneMsisdn  string `json:"tglTAT"`
	TelephoneAsat    string `json:"tglTMT"`
	KodeCabang       string `json:"kdCabang"`
	NamaCabang       string `json:"nmCabang"`
	KodeJenisPeserta string `json:"kdJnsPst"`
	NamaJenisPeserta string `json:"nmJnsPst"`
	KelasRawat       string `json:"klsRawat"`
	Status           string `json:"statusPeserta"`
	Aktif            string `json:"aktif"`
	KeteranganAktif  string `json:"ketAktif"`
	NoSKTM           string `json:"noSKTM,omitempty"`
	NoKTP            string `json:"noKtp"`
	Asuransi         string `json:"asuransi,omitempty"`
	CoB              string `json:"cob,omitempty"`
	TunggakanIuran   string `json:"tglTunggak,omitempty"`
	MR               struct {
		NoMR         string `json:"noMR"`
		NamaMR       string `json:"nmMR"`
		Sex          string `json:"sex"`
		TglLahir     string `json:"tglLahir"`
		TglMeninggal string `json:"tglMeninggal,omitempty"`
	} `json:"mr,omitempty"`
}

// PesertaResponse represents peserta API response
type PesertaResponse struct {
	BaseResponse
	Data     *PesertaData `json:"data,omitempty"`
	MetaData interface{}  `json:"metaData,omitempty"`
}

// === SEP (Surat Eligibilitas Peserta) MODELS ===

// SEPRequest represents SEP creation/update request
type SepRequest struct {
	BaseRequest
	NoKartu      string      `json:"noKartu" validate:"required"`
	TglSep       string      `json:"tglSep" validate:"required"`
	PPKPelayanan string      `json:"ppkPelayanan" validate:"required"`
	JnsPelayanan string      `json:"jnsPelayanan" validate:"required,oneof=1 2"`
	KlsRawat     string      `json:"klsRawat" validate:"required,oneof=1 2 3"`
	NoMR         string      `json:"noMR" validate:"required"`
	Rujukan      *SepRujukan `json:"rujukan"`
	Catatan      string      `json:"catatan,omitempty"`
	Diagnosa     string      `json:"diagnosa" validate:"required"`
	PoliTujuan   string      `json:"poli" validate:"required"`
	ExternalUser string      `json:"user" validate:"required"`
	NoTelp       string      `json:"noTelp,omitempty"`
}

// SEPRujukan represents rujukan information in SEP
type SepRujukan struct {
	AsalRujukan string `json:"asalRujukan" validate:"required,oneof=1 2"`
	TglRujukan  string `json:"tglRujukan" validate:"required"`
	NoRujukan   string `json:"noRujukan" validate:"required"`
	PPKRujukan  string `json:"ppkRujukan" validate:"required"`
}

// SEPData represents SEP response data
type SepData struct {
	NoSep        string      `json:"noSep"`
	TglSep       string      `json:"tglSep"`
	JnsPelayanan string      `json:"jnsPelayanan"`
	PoliTujuan   string      `json:"poli"`
	KlsRawat     string      `json:"klsRawat"`
	NoMR         string      `json:"noMR"`
	Rujukan      SepRujukan  `json:"rujukan"`
	Catatan      string      `json:"catatan"`
	Diagnosa     string      `json:"diagnosa"`
	Peserta      PesertaData `json:"peserta"`
	Informasi    struct {
		NoSKDP       string `json:"noSKDP,omitempty"`
		DPJPLayan    string `json:"dpjpLayan"`
		NoTelepon    string `json:"noTelp"`
		SubSpesialis string `json:"subSpesialis,omitempty"`
	} `json:"informasi"`
}

// SEPResponse represents SEP API response
type SepResponse struct {
	BaseResponse
	Data *SepData `json:"data,omitempty"`
}

// === RUJUKAN MODELS ===

// RujukanRequest represents rujukan lookup request
type RujukanRequest struct {
	BaseRequest
	NoRujukan string `json:"noRujukan" validate:"required"`
	NoKartu   string `json:"noKartu,omitempty"`
}

// RujukanData represents rujukan information
type RujukanData struct {
	NoRujukan  string `json:"noRujukan"`
	TglRujukan string `json:"tglRujukan"`
	NoKartu    string `json:"noKartu"`
	Nama       string `json:"nama"`
	KelasRawat string `json:"kelasRawat"`
	Diagnosa   struct {
		KodeDiagnosa string `json:"kdDiagnosa"`
		NamaDiagnosa string `json:"nmDiagnosa"`
	} `json:"diagnosa"`
	PoliRujukan struct {
		KodePoli string `json:"kdPoli"`
		NamaPoli string `json:"nmPoli"`
	} `json:"poliRujukan"`
	ProvPerujuk struct {
		KodeProvider string `json:"kdProvider"`
		NamaProvider string `json:"nmProvider"`
	} `json:"provPerujuk"`
	PelayananInfo string `json:"pelayanan"`
	StatusRujukan string `json:"statusRujukan"`
}

// RujukanResponse represents rujukan API response
type RujukanResponse struct {
	BaseResponse
	Data *RujukanData  `json:"data,omitempty"`
	List []RujukanData `json:"list,omitempty"`
}
