import { Injectable } from "@nestjs/common"; import { FreebitOrchestratorService } from "./services/freebit-orchestrator.service"; import type { SimDetails, SimUsage, SimTopUpHistory, } from "./interfaces/freebit.types"; import type { MnpData } from "@customer-portal/domain"; @Injectable() export class FreebitService { constructor( private readonly orchestrator: FreebitOrchestratorService ) {} /** * Get SIM account details */ async getSimDetails(account: string): Promise { return this.orchestrator.getSimDetails(account); } /** * Get SIM usage information */ async getSimUsage(account: string): Promise { return this.orchestrator.getSimUsage(account); } /** * Top up SIM data quota */ async topUpSim( account: string, quotaMb: number, options: { description?: string } = {} ): Promise { return this.orchestrator.topUpSim(account, quotaMb, options); } /** * Get SIM top-up history */ async getSimTopUpHistory( account: string, fromDate: string, toDate: string ): Promise { return this.orchestrator.getSimTopUpHistory(account, fromDate, toDate); } /** * Change SIM plan */ async changeSimPlan( account: string, newPlanCode: string, options: { assignGlobalIp?: boolean; scheduledAt?: string } = {} ): Promise<{ ipv4?: string; ipv6?: string }> { return this.orchestrator.changeSimPlan(account, newPlanCode, options); } /** * Update SIM features */ async updateSimFeatures( account: string, features: { voiceMailEnabled?: boolean; callWaitingEnabled?: boolean; internationalRoamingEnabled?: boolean; networkType?: "4G" | "5G"; } ): Promise { return this.orchestrator.updateSimFeatures(account, features); } /** * Cancel SIM service */ async cancelSim(account: string, scheduledAt?: string): Promise { return this.orchestrator.cancelSim(account, scheduledAt); } /** * Reissue eSIM profile (simple) */ async reissueEsimProfile(account: string): Promise { return this.orchestrator.reissueEsimProfile(account); } /** * Reissue eSIM profile with enhanced options */ async reissueEsimProfileEnhanced( account: string, newEid: string, options: { oldEid?: string; planCode?: string } = {} ): Promise { return this.orchestrator.reissueEsimProfileEnhanced(account, newEid, options); } /** * Health check */ async healthCheck(): Promise { return this.orchestrator.healthCheck(); } /** * Activate eSIM account (for backward compatibility) */ async activateEsimAccountNew(params: { account: string; eid: string; planSku: string; simType: "eSIM" | "Physical SIM"; activationType: "Immediate" | "Scheduled"; scheduledAt?: string; mnp?: MnpData; }): Promise { // For eSIM, use the enhanced reissue method if (params.simType === "eSIM") { return this.orchestrator.reissueEsimProfileEnhanced(params.account, params.eid, { planCode: params.planSku, }); } // For Physical SIM, this would be a different operation throw new Error("Physical SIM activation not implemented in this method"); } }