import { isSyncApiType, isUserApiType } from '@cfdm/shared/contracts/provider' import type { ProviderAccount, Provider } from '@/types/entities' export { isSyncApiType, isUserApiType } export function providerByIdMap(providers: Provider[]): Map { return new Map(providers.map((p) => [p.id, p])) } export function syncableAccounts( providerAccounts: ProviderAccount[], providers: Provider[], ): ProviderAccount[] { const pmap = providerByIdMap(providers) return providerAccounts.filter((a) => { const p = pmap.get(a.providerId) return isSyncApiType(p?.apiType) && Boolean((p?.apiBaseUrl || '').trim()) && a.apiCredentialsSet }) } /** @deprecated Используйте syncableAccounts */ export const billmanagerSyncableAccounts = syncableAccounts export function accountSyncUiReady( account: ProviderAccount, provider?: Provider | null, ): boolean { return ( isSyncApiType(provider?.apiType) && Boolean((provider?.apiBaseUrl || '').trim()) && Boolean(account.apiCredentialsSet) ) } /** @deprecated Используйте accountSyncUiReady */ export const accountBillmanagerUiReady = accountSyncUiReady export function accountUsesApiBalance( account: ProviderAccount, provider?: Provider | null, ): boolean { return isSyncApiType(provider?.apiType) && account.balance_api != null } /** @deprecated Используйте accountUsesApiBalance */ export const accountUsesBillmanagerBalanceApi = accountUsesApiBalance export function accountSelectLabel( account: ProviderAccount, providerById: Map, scopedProviderId?: string, ): string { const name = account.name?.trim() || '—' if (scopedProviderId) return name const providerName = providerById.get(account.providerId)?.name ?? '—' return `${providerName} / ${name}` } export function accountCredentialLabels(apiType?: string | null): { loginLabel: string passwordLabel: string loginPlaceholder: string } { if (String(apiType).toLowerCase() === '4vps') { return { loginLabel: 'Panel ID', passwordLabel: 'API Key', loginPlaceholder: '1', } } if (isUserApiType(apiType)) { return { loginLabel: '', passwordLabel: 'API Token', loginPlaceholder: '', } } return { loginLabel: 'Логин API', passwordLabel: 'Пароль API', loginPlaceholder: '', } }