"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.transformFreebitAccountDetails = transformFreebitAccountDetails; exports.transformFreebitTrafficInfo = transformFreebitTrafficInfo; exports.transformFreebitQuotaHistory = transformFreebitQuotaHistory; exports.transformFreebitTopUpResponse = transformFreebitTopUpResponse; exports.transformFreebitAddSpecResponse = transformFreebitAddSpecResponse; exports.transformFreebitPlanChangeResponse = transformFreebitPlanChangeResponse; exports.transformFreebitCancelPlanResponse = transformFreebitCancelPlanResponse; exports.transformFreebitCancelAccountResponse = transformFreebitCancelAccountResponse; exports.transformFreebitEsimReissueResponse = transformFreebitEsimReissueResponse; exports.transformFreebitEsimAddAccountResponse = transformFreebitEsimAddAccountResponse; exports.transformFreebitEsimActivationResponse = transformFreebitEsimActivationResponse; exports.transformFreebitAuthResponse = transformFreebitAuthResponse; const schema_1 = require("../../schema"); const raw_types_1 = require("./raw.types"); function asString(value) { if (typeof value === "string") return value; if (typeof value === "number") return String(value); return ""; } function asNumber(value) { if (typeof value === "number") return value; if (typeof value === "string") { const parsed = parseFloat(value); return isNaN(parsed) ? 0 : parsed; } return 0; } function parseBooleanFlag(value) { if (typeof value === "boolean") return value; if (typeof value === "number") return value === 10; if (typeof value === "string") return value === "10" || value.toLowerCase() === "true"; return false; } function mapSimStatus(status) { if (!status) return "pending"; const normalized = status.toLowerCase(); if (normalized.includes("active") || normalized === "10") return "active"; if (normalized.includes("suspend")) return "suspended"; if (normalized.includes("cancel") || normalized.includes("terminate")) return "cancelled"; return "pending"; } function deriveSimType(sizeValue, eid) { const simSizeStr = typeof sizeValue === "number" ? String(sizeValue) : sizeValue; const raw = typeof simSizeStr === "string" ? simSizeStr.toLowerCase() : undefined; const eidStr = typeof eid === "number" ? String(eid) : eid; if (eidStr && eidStr.length > 0) { return "esim"; } switch (raw) { case "nano": return "nano"; case "micro": return "micro"; case "esim": return "esim"; default: return "standard"; } } function transformFreebitAccountDetails(raw) { const response = raw_types_1.freebitAccountDetailsRawSchema.parse(raw); const account = response.responseDatas.at(0); if (!account) { throw new Error("Freebit account details missing response data"); } const sanitizedAccount = asString(account.account); const simSizeValue = account.simSize ?? account.size; const eidValue = account.eid; const simType = deriveSimType(typeof simSizeValue === 'number' ? String(simSizeValue) : simSizeValue, typeof eidValue === 'number' ? String(eidValue) : eidValue); const voiceMailEnabled = parseBooleanFlag(account.voicemail ?? account.voiceMail); const callWaitingEnabled = parseBooleanFlag(account.callwaiting ?? account.callWaiting); const internationalRoamingEnabled = parseBooleanFlag(account.worldwing ?? account.worldWing); const simDetails = { account: sanitizedAccount, status: mapSimStatus(account.status), planCode: asString(account.planCode), planName: asString(account.planName), simType, iccid: asString(account.iccid), eid: asString(eidValue), msisdn: asString(account.msisdn), imsi: asString(account.imsi), remainingQuotaMb: asNumber(account.quota), remainingQuotaKb: asNumber(account.quotaKb), voiceMailEnabled, callWaitingEnabled, internationalRoamingEnabled, networkType: asString(account.contractLine), activatedAt: asString(account.startDate) || undefined, expiresAt: asString(account.expireDate) || undefined, }; return schema_1.simDetailsSchema.parse(simDetails); } function transformFreebitTrafficInfo(raw) { const response = raw_types_1.freebitTrafficInfoRawSchema.parse(raw); const simUsage = { account: asString(response.account), todayUsageMb: response.traffic?.today ? asNumber(response.traffic.today) / 1024 : 0, todayUsageKb: response.traffic?.today ? asNumber(response.traffic.today) : 0, monthlyUsageMb: undefined, monthlyUsageKb: undefined, recentDaysUsage: [], isBlacklisted: parseBooleanFlag(response.traffic?.blackList), lastUpdated: new Date().toISOString(), }; return schema_1.simUsageSchema.parse(simUsage); } function transformFreebitQuotaHistory(raw, accountOverride) { const response = raw_types_1.freebitQuotaHistoryRawSchema.parse(raw); const history = { account: accountOverride ?? asString(response.account), totalAdditions: asNumber(response.total), additionCount: asNumber(response.count), history: (response.quotaHistory || []).map(detail => ({ quotaKb: asNumber(detail.addQuotaKb), quotaMb: asNumber(detail.addQuotaKb) / 1024, addedDate: detail.addDate || "", expiryDate: detail.expireDate || "", campaignCode: detail.campaignCode || "", })), }; return schema_1.simTopUpHistorySchema.parse(history); } function transformFreebitTopUpResponse(raw) { return raw_types_1.freebitTopUpRawSchema.parse(raw); } function transformFreebitAddSpecResponse(raw) { return raw_types_1.freebitAddSpecRawSchema.parse(raw); } function transformFreebitPlanChangeResponse(raw) { return raw_types_1.freebitPlanChangeRawSchema.parse(raw); } function transformFreebitCancelPlanResponse(raw) { return raw_types_1.freebitCancelPlanRawSchema.parse(raw); } function transformFreebitCancelAccountResponse(raw) { return raw_types_1.freebitCancelAccountRawSchema.parse(raw); } function transformFreebitEsimReissueResponse(raw) { return raw_types_1.freebitEsimReissueRawSchema.parse(raw); } function transformFreebitEsimAddAccountResponse(raw) { return raw_types_1.freebitEsimAddAccountRawSchema.parse(raw); } function transformFreebitEsimActivationResponse(raw) { return raw_types_1.freebitEsimAddAccountRawSchema.parse(raw); } function transformFreebitAuthResponse(raw) { return raw_types_1.freebitAuthResponseRawSchema.parse(raw); } //# sourceMappingURL=mapper.js.map