import 'dart:core';

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

import 'vitalUser.m.dart';

import 'device.m.dart';
import 'vitalResidence.m.dart';
import 'vitalUserFeature.m.dart';


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

	Future<String> createUserAsync(CreateUserRequest request) async {
		var rpcRst = await call("CreateUserAsync", request);
		return rpcRst;
	}

	Future<UserDTO2> getUserDetailAsync(GetUserRequest request) async {
		var rpcRst = await call("GetUserDetailAsync", request);
		var result = UserDTO2.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<UserDTO2> getUserDetailByKeyAsync(GetUserByKeyRequest request) async {
		var rpcRst = await call("GetUserDetailByKeyAsync", request);
		var result = UserDTO2.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<PageCollection<UserDTO2>> getUserPageAsync(UserPageRequest request) async {
		var rpcRst = await call("GetUserPageAsync", request);
		var result = PageCollection<UserDTO2>.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<bool> removeUserAsync(RemoveUserRequest request) async {
		var rpcRst = await call("RemoveUserAsync", request);
		return rpcRst;
	}

	Future<List<UserDTO2>> getUserListAsync(GetUserListRequest2 request) async {
		var rpcRst = await call("GetUserListAsync", request);
		var result = (rpcRst as List).map((e)=>UserDTO2.fromJson(e as Map<String, dynamic>)).toList();
		return result;
	}

	Future<bool> updateUserAsync(UpdateUserRequest request) async {
		var rpcRst = await call("UpdateUserAsync", request);
		return rpcRst;
	}

	Future<bool> resetUserNameAsync(ResetUserNameRequest request) async {
		var rpcRst = await call("ResetUserNameAsync", request);
		return rpcRst;
	}

	Future<PageCollection<UserDTO2>> getUserPageByOrganizationCodeAsync(GetUserPageByOrganizationCodeRequest request) async {
		var rpcRst = await call("GetUserPageByOrganizationCodeAsync", request);
		var result = PageCollection<UserDTO2>.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<bool> setAreaOfResponsibilityAsync(SetAreaOfResponsibilityRequest request) async {
		var rpcRst = await call("SetAreaOfResponsibilityAsync", request);
		return rpcRst;
	}

	Future<List<ResidenceDTO>> getAreaOfResponsibilityAsync(GetAreaOfResponsibilityRequest request) async {
		var rpcRst = await call("GetAreaOfResponsibilityAsync", request);
		var result = (rpcRst as List).map((e)=>ResidenceDTO.fromJson(e as Map<String, dynamic>)).toList();
		return result;
	}

	Future<PageCollection<UserDTO2>> getUserPageByTeamCodeAsync(GetUserPageByTeamCodeRequest request) async {
		var rpcRst = await call("GetUserPageByTeamCodeAsync", request);
		var result = PageCollection<UserDTO2>.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<bool> setSignatureAsync(SetSignatureRequest request) async {
		var rpcRst = await call("SetSignatureAsync", request);
		return rpcRst;
	}

	Future<List<UserFeatureDTO>> getMenuPermissionAsync(GetMenuPermissionRequest request) async {
		var rpcRst = await call("GetMenuPermissionAsync", request);
		var result = (rpcRst as List).map((e)=>UserFeatureDTO.fromJson(e as Map<String, dynamic>)).toList();
		return result;
	}

	Future<List<UserFeatureDTO>> getOperationPermissionAsync(GetOperationPermissionRequest request) async {
		var rpcRst = await call("GetOperationPermissionAsync", request);
		var result = (rpcRst as List).map((e)=>UserFeatureDTO.fromJson(e as Map<String, dynamic>)).toList();
		return result;
	}

}