use serde_json::{json, Value};
use super::jwt::pass_type_id_default;
use super::GoogleWalletBuilder;
use crate::subject::WalletSubject;
use crate::WalletError;
pub(crate) fn build_event_ticket_object<S: WalletSubject>(
builder: &GoogleWalletBuilder,
subject: &S,
) -> Result<Value, WalletError> {
let class_suffix = pass_type_id_default().replace('.', "_");
let class_id = format!("{}.{}", builder.issuer_id, class_suffix);
let object_id = format!("{}.{}", builder.issuer_id, subject.serial());
let primary_value = subject
.primary()
.first()
.map(|f| f.value.clone())
.unwrap_or_default();
Ok(json!({
"id": object_id,
"classId": class_id,
"state": "active",
"barcode": {
"type": "qrCode",
"value": subject.barcode_token(),
},
"ticketHolderName": primary_value,
"eventName": {
"defaultValue": {
"language": "en",
"value": primary_value,
}
}
}))
}