package observation

import (
	"encoding/json"
	"fmt"
	"time"
)

// MapToInternalAPI memetakan data database menjadi payload untuk Internal API GoPrint
// TODO: Sesuaikan dengan JSON Payload yang dibutuhkan oleh internal endpoint Observation Anda
func MapToInternalAPI(dbData *ObservationDB, orgID string) map[string]interface{} {
	// Format Waktu
	waktuPeriksa := time.Now()
	if dbData.TglPeriksa.Valid {
		waktuPeriksa = dbData.TglPeriksa.Time
	}

	payload := map[string]interface{}{
		"observation_id":  fmt.Sprintf("%d", dbData.IdxPemeriksaan),
		"encounter_id":    fmt.Sprintf("%d", dbData.IdxDaftar),
		"organization_id": orgID,
		"patient_id":      dbData.NoMR.String, // Sebaiknya diganti dengan IHS Number di Service
		"code":            dbData.KodePemeriksaan.String,
		"value":           dbData.Nilai.String,
		"unit":            dbData.Satuan.String,
		"effective_date":  waktuPeriksa.Format(time.RFC3339),
	}
	return payload
}

// MapToSyncLog membuat struktur data log histori untuk disimpan ke tabel database
func MapToSyncLog(idx int64, fhirID string, reqPayload interface{}, respBody []byte, status string, errMsg string) ObservationSyncLog {
	reqBytes, _ := json.MarshalIndent(reqPayload, "", "  ")
	return ObservationSyncLog{
		IdxPemeriksaan:  idx,
		ObservationID:   fhirID,
		RequestPayload:  string(reqBytes),
		ResponsePayload: string(respBody),
		Status:          status,
		ErrorMessage:    errMsg,
	}
}
