import 'dart:core';

import 'package:fis_jsonrpc/client_base.dart';
import 'package:fis_common/json_convert.dart';

import 'login.m.dart';

class LoginService extends JsonRpcClientBase {
	LoginService(
		String host, {
		String serviceName = "ILoginService",
		Map<String, String>? headers,
		int? timeout,
	}) : super(
						host,
						serviceName,
						headers: headers,
						timeout: timeout,
				) {
		/// 注册响应实体反序列化处理器
		FJsonConvert.setDecoder((map) => UserTokenDTO.fromJson(map));
	}

	Future<UserTokenDTO> clientLoginAsync(ClientLoginRequest request) async {
		var rpcRst = await call("ClientLoginAsync", request);
		var result = UserTokenDTO.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<UserTokenDTO> commonLoginAsync(CommonLoginRequest request) async {
		var rpcRst = await call("CommonLoginAsync", request);
		var result = UserTokenDTO.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<int> checkLoginType(CheckLoginTypeRequest request) async {
		var rpcRst = await call("CheckLoginType", request);
		return rpcRst;
	}

	Future<bool> commonSignUpAsync(CommonSignUpRequest request) async {
		var rpcRst = await call("CommonSignUpAsync", request);
		return rpcRst;
	}

	Future<bool> signUpAsync(SignUpRequest request) async {
		var rpcRst = await call("SignUpAsync", request);
		return rpcRst;
	}

	Future<bool> checkSMSVerificationCode(CheckSMSVerificationCodeRequest request) async {
		var rpcRst = await call("CheckSMSVerificationCode", request);
		return rpcRst;
	}

	Future<bool> sendSMSVerificationCode(SendSMSVerificationCodeRequest request) async {
		var rpcRst = await call("SendSMSVerificationCode", request);
		return rpcRst;
	}

	Future<bool> sendEmailVerificationCode(SendEmailVerificationCodeRequest request) async {
		var rpcRst = await call("SendEmailVerificationCode", request);
		return rpcRst;
	}

	Future<bool> checkEmailVerificationCode(CheckEmailVerificationCodeRequest request) async {
		var rpcRst = await call("CheckEmailVerificationCode", request);
		return rpcRst;
	}

	Future<bool> retrievePasswordByPhone(RetrievePasswordByPhoneRequest request) async {
		var rpcRst = await call("RetrievePasswordByPhone", request);
		return rpcRst;
	}

	Future<bool> retrievePasswordByEmail(RetrievePasswordByEmailRequest request) async {
		var rpcRst = await call("RetrievePasswordByEmail", request);
		return rpcRst;
	}

	Future<bool> verifyAccount(VerifyAccountRequest request) async {
		var rpcRst = await call("VerifyAccount", request);
		return rpcRst;
	}

}