import Foundation import Postbox import TelegramApi import SyncCore import MtProtoKit import SwiftSignalKit public struct BankCardUrl { public let title: String public let url: String } public struct BankCardInfo { public let title: String public let urls: [BankCardUrl] } public func getBankCardInfo(account: Account, cardNumber: String) -> Signal { return currentWebDocumentsHostDatacenterId(postbox: account.postbox, isTestingEnvironment: false) |> mapToSignal { datacenterId in let signal: Signal if account.network.datacenterId != datacenterId { signal = account.network.download(datacenterId: Int(datacenterId), isMedia: false, tag: nil) |> castError(MTRpcError.self) |> mapToSignal { worker in return worker.request(Api.functions.payments.getBankCardData(number: cardNumber)) } } else { signal = account.network.request(Api.functions.payments.getBankCardData(number: cardNumber)) } return signal |> map { result -> BankCardInfo? in return BankCardInfo(apiBankCardData: result) } |> `catch` { _ -> Signal in return .single(nil) } } } extension BankCardUrl { init(apiBankCardOpenUrl: Api.BankCardOpenUrl) { switch apiBankCardOpenUrl { case let .bankCardOpenUrl(url, name): self.title = name self.url = url } } } extension BankCardInfo { init(apiBankCardData: Api.payments.BankCardData) { switch apiBankCardData { case let .bankCardData(title, urls): self.title = title self.urls = urls.map { BankCardUrl(apiBankCardOpenUrl: $0) } } } }