import { apiGet, apiPost } from '@/lib/http' import type { CustomerBindingInfo, CustomerLoginInfo, CustomerSemiAutoTask, } from '@/types/customer-fulfillment' export function fetchCustomerFulfillment(orderNo: string) { return apiGet( `/api/v1/customer-fulfillment/${encodeURIComponent(orderNo)}`, ) } export function markCustomerFulfillmentOpened(orderNo: string, taskId: number) { return apiPost<{ ok: boolean }>( `/api/v1/customer-fulfillment/${encodeURIComponent(orderNo)}/tasks/${taskId}/open`, {}, ) } export function saveCustomerTaskProfile( orderNo: string, taskId: number, input: { roleName: string; roleId: string; serverZone: string }, ) { return apiPost<{ task: CustomerSemiAutoTask }>( `/api/v1/customer-fulfillment/${encodeURIComponent(orderNo)}/tasks/${taskId}/profile`, input, ) } export function startCustomerLogin(orderNo: string, taskId: number) { return apiPost<{ task: CustomerSemiAutoTask; login: CustomerLoginInfo }>( `/api/v1/customer-fulfillment/${encodeURIComponent(orderNo)}/tasks/${taskId}/login/start`, {}, ) } export function pollCustomerLogin(orderNo: string, taskId: number) { return apiGet<{ task: CustomerSemiAutoTask; login: CustomerLoginInfo | null }>( `/api/v1/customer-fulfillment/${encodeURIComponent(orderNo)}/tasks/${taskId}/login/status`, ) } export function startCustomerBinding( orderNo: string, taskId: number, options: { forceRebind?: boolean } = {}, ) { return apiPost<{ task: CustomerSemiAutoTask; binding: CustomerBindingInfo }>( `/api/v1/customer-fulfillment/${encodeURIComponent(orderNo)}/tasks/${taskId}/binding/start`, options.forceRebind ? { forceRebind: true } : {}, ) } export function pollCustomerBinding(orderNo: string, taskId: number) { return apiGet<{ task: CustomerSemiAutoTask; binding: CustomerBindingInfo | null }>( `/api/v1/customer-fulfillment/${encodeURIComponent(orderNo)}/tasks/${taskId}/binding/status`, ) } export function confirmCustomerBinding(orderNo: string, taskId: number) { return apiPost<{ task: CustomerSemiAutoTask; binding: CustomerBindingInfo }>( `/api/v1/customer-fulfillment/${encodeURIComponent(orderNo)}/tasks/${taskId}/binding/confirm`, {}, ) } type CustomerHuyaChallengeBase = { image: string width: number height: number } export type CustomerHuyaSmsChallenge = | (CustomerHuyaChallengeBase & { type: 'slider' puzzleImage: string puzzleWidth: number puzzleY: number }) | (CustomerHuyaChallengeBase & { type: 'rotate' puzzleImage: string puzzleWidth: number puzzleHeight: number puzzleX: number puzzleY: number }) | (CustomerHuyaChallengeBase & { type: 'click' tipImage: string question: string wordSize: number }) export type CustomerHuyaChallengeSolution = { distance?: number angle?: number points?: Array<{ x: number; y: number }> } export type CustomerHuyaSmsSendResult = { ok: boolean message: string expiresAt: string challenge: CustomerHuyaSmsChallenge | null } export function sendCustomerHuyaSmsCode(orderNo: string, taskId: number, mobile: string) { return apiPost( `/api/v1/customer-fulfillment/${encodeURIComponent(orderNo)}/tasks/${taskId}/huya/sms/send`, { mobile }, ) } export function verifyCustomerHuyaSmsChallenge( orderNo: string, taskId: number, solution: CustomerHuyaChallengeSolution, ) { return apiPost( `/api/v1/customer-fulfillment/${encodeURIComponent(orderNo)}/tasks/${taskId}/huya/sms/verify`, solution, ) } export function loginCustomerHuyaSms( orderNo: string, taskId: number, input: { mobile: string; code: string }, ) { return apiPost<{ task: CustomerSemiAutoTask; login: CustomerLoginInfo }>( `/api/v1/customer-fulfillment/${encodeURIComponent(orderNo)}/tasks/${taskId}/huya/sms/login`, input, ) } export type CustomerWeiboCountryCode = { code: string name: string } export function fetchCustomerWeiboCountryCodes(orderNo: string, taskId: number) { return apiGet<{ countryCodes: CustomerWeiboCountryCode[] }>( `/api/v1/customer-fulfillment/${encodeURIComponent(orderNo)}/tasks/${taskId}/weibo/config`, ) } export function sendCustomerWeiboSmsCode( orderNo: string, taskId: number, mobile: string, countryCode: string, mfaId = '', ) { return apiPost<{ ok: boolean message: string mfaRequired: boolean mfaId?: string captchaId?: string }>(`/api/v1/customer-fulfillment/${encodeURIComponent(orderNo)}/tasks/${taskId}/weibo/sms/send`, { mobile, countryCode, mfaId, }) } export function loginCustomerWeiboSms( orderNo: string, taskId: number, input: { mobile: string; code: string; countryCode: string; rid?: string }, ) { return apiPost<{ task: CustomerSemiAutoTask; login: CustomerLoginInfo }>( `/api/v1/customer-fulfillment/${encodeURIComponent(orderNo)}/tasks/${taskId}/weibo/sms/login`, input, ) } export function startCustomerWeiboQrLogin(orderNo: string, taskId: number) { return apiGet<{ task: CustomerSemiAutoTask; login: CustomerLoginInfo }>( `/api/v1/customer-fulfillment/${encodeURIComponent(orderNo)}/tasks/${taskId}/weibo/qrcode`, ) } export function pollCustomerWeiboQrLogin(orderNo: string, taskId: number) { return apiGet<{ task: CustomerSemiAutoTask; login: CustomerLoginInfo | null }>( `/api/v1/customer-fulfillment/${encodeURIComponent(orderNo)}/tasks/${taskId}/weibo/qrcode/status`, ) }