package encounter

import (
	"database/sql"
	"time"
)

// EncounterRequest merepresentasikan data input untuk membuat atau memperbarui Encounter.
type EncounterRequest struct {
	EncounterID      string     `json:"encounter_id" binding:"required"`
	OrganizationID   string     `json:"organization_id" binding:"required"`
	EpisodeOfCareID  string     `json:"episode_of_care_id,omitempty"`
	PatientID        string     `json:"patient_id" binding:"required"`
	PatientName      string     `json:"patient_name" binding:"required"`
	PractitionerID   string     `json:"practitioner_id" binding:"required"`
	PractitionerName string     `json:"practitioner_name" binding:"required"`
	LocationID       string     `json:"location_id" binding:"required"`
	LocationName     string     `json:"location_name" binding:"required"`
	Status           string     `json:"status" binding:"required,oneof=arrived in-progress finished cancelled"` // arrived, in-progress, finished, cancelled
	Class            string     `json:"class" binding:"required,oneof=AMB IMP EMER"`                            // AMB (ambulatory), IMP (inpatient), EMER (emergency)
	PeriodStart      time.Time  `json:"period_start" binding:"required"`
	PeriodEnd        *time.Time `json:"period_end,omitempty"`
}

// EncounterPatchRequest merepresentasikan payload operasi JSON Patch.
type EncounterPatchRequest []map[string]interface{}

// PendaftaranDB merepresentasikan baris data dari tabel t_pendaftaran
type PendaftaranDB struct {
	IdxDaftar       int64          `db:"idxdaftar"`
	NoMR            sql.NullString `db:"nomr"`
	JamReg          sql.NullTime   `db:"jamreg"`
	MasukPoly       sql.NullTime   `db:"masukpoly"`
	KeluarPoly      sql.NullTime   `db:"keluarpoly"`
	Batal           sql.NullString `db:"batal"`
	KdPoly          sql.NullInt64  `db:"kdpoly"`
	PoliNameHFIS    sql.NullString `db:"poli_name_hfis"`
	DokterIDHFIS    sql.NullString `db:"dokter_id_hfis"`
	DokterNameHFIS  sql.NullString `db:"dokter_name_hfis"`
	PasienNIK       sql.NullString `db:"pasien_nik"`
	DokterNIK       sql.NullString `db:"dokter_nik"`
	PatientIHS      sql.NullString `db:"patient_ihs"`
	PractitionerIHS sql.NullString `db:"practitioner_ihs"`
}
