import Foundation struct MibSession: Codable { let appId: String let xxid: String let nonceGenerator: String let sessionKey: String } struct MibProfile: Codable, Identifiable { let profileId: String let customerProfileId: String let annexId: String let customerId: String let name: String let cifType: String let profileType: String let color: String let customerImage: String? var id: String { profileId } } struct MibCard: Codable, Identifiable { let cardId: String let maskedCardNumber: String let cardStatus: String let cardType: String let cardTypeDesc: String let customerId: String let phoneNumber: String let cardHolderName: String let loginTag: String var id: String { cardId } } struct MibFinanceDeal: Codable, Identifiable { let dealNo: String let productDesc: String let dealStatus: String let statusDesc: String let dealAmount: Double let paidAmount: Double let outstandingAmount: Double let dealDate: String let overdueAmount: Double let installmentAmount: Double let noOfInstallments: Int let lastPaidDate: String let lastPayAmount: Double let currency: String var id: String { dealNo } } struct MibTransferResult { let success: Bool let trxId: String let date: String let errorMessage: String } enum MibError: LocalizedError { case networkError(String) case serverError(String) case sessionExpired case invalidCredentials case decryptionFailed case encryptionFailed case invalidResponse var errorDescription: String? { switch self { case .networkError(let msg): return "Network error: \(msg)" case .serverError(let msg): return "Server error: \(msg)" case .sessionExpired: return "Session expired. Please log in again." case .invalidCredentials: return "Invalid credentials." case .decryptionFailed: return "Failed to decrypt response." case .encryptionFailed: return "Failed to encrypt request." case .invalidResponse: return "Unexpected server response." } } }