import 'dart:core';

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

import 'user.m.dart';

import 'liveConsultation.m.dart';
import 'upgrade.m.dart';
import 'education.m.dart';
import 'organization.m.dart';
import 'recordInfo.m.dart';


class UserService extends JsonRpcClientBase {
	UserService(
		String host, {
		String serviceName = "IUserService",
		Map<String, String>? headers,
		int? timeout,
	}) : super(
						host,
						serviceName,
						headers: headers,
						timeout: timeout,
				) {
		/// 注册响应实体反序列化处理器
		FJsonConvert.setDecoder((map) => UserDTO.fromJson(map));
		FJsonConvert.setDecoder((map) => UserExtendDTO.fromJson(map));
		FJsonConvert.setDecoder((map) => PageResult<UserExtendDTO>.fromJson(map));
		FJsonConvert.setDecoder((map) => PageResult<ShareDeviceUserDTO>.fromJson(map));
		FJsonConvert.setDecoder((map) => ShareDeviceUserDTO.fromJson(map));
		FJsonConvert.setDecoder((map) => UserFeatureInfoResult.fromJson(map));
		FJsonConvert.setDecoder((map) => UserInfoByCodeDTO.fromJson(map));
		FJsonConvert.setDecoder((map) => ClientScheduleDTO.fromJson(map));
		FJsonConvert.setDecoder((map) => PageResult<MessageExtendInfoDTO>.fromJson(map));
		FJsonConvert.setDecoder((map) => MessageExtendInfoDTO.fromJson(map));
		FJsonConvert.setDecoder((map) => PageResult<AnnouncementExtendInfoDTO>.fromJson(map));
		FJsonConvert.setDecoder((map) => AnnouncementExtendInfoDTO.fromJson(map));
		FJsonConvert.setDecoder((map) => NoReadMessagesDTO.fromJson(map));
		FJsonConvert.setDecoder((map) => MigrateRecordDTO.fromJson(map));
		FJsonConvert.setDecoder((map) => PageResult<UserGroupDTO>.fromJson(map));
		FJsonConvert.setDecoder((map) => UserGroupDTO.fromJson(map));
		FJsonConvert.setDecoder((map) => PageResult<DeviceInfoDTO>.fromJson(map));
		FJsonConvert.setDecoder((map) => DeviceInfoDTO.fromJson(map));
		FJsonConvert.setDecoder((map) => PageResult<OrganizationSimplifyDTO>.fromJson(map));
		FJsonConvert.setDecoder((map) => OrganizationSimplifyDTO.fromJson(map));
		FJsonConvert.setDecoder((map) => PageResult<SimpleRecordInfoDTO>.fromJson(map));
		FJsonConvert.setDecoder((map) => SimpleRecordInfoDTO.fromJson(map));
		FJsonConvert.setDecoder((map) => PackagesDTO.fromJson(map));
	}

	Future<bool> heartRateAsync(TokenRequest request) async {
		var rpcRst = await call("HeartRateAsync", request);
		return rpcRst;
	}

	Future<UserDTO> getUserInfoAsync(GetUserInfoRequest request) async {
		var rpcRst = await call("GetUserInfoAsync", request);
		var result = UserDTO.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<bool> alterUserInfoAsync(AlterUserInfoRequest request) async {
		var rpcRst = await call("AlterUserInfoAsync", request);
		return rpcRst;
	}

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

	Future<PageResult<UserExtendDTO>> getUserPagesAsync(GetUserPageRequest request) async {
		var rpcRst = await call("GetUserPagesAsync", request);
		var result = PageResult<UserExtendDTO>.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<bool> removeUsersFromOrganizationAsync(RemoveUsersFromOrganizationRequest request) async {
		var rpcRst = await call("RemoveUsersFromOrganizationAsync", request);
		return rpcRst;
	}

	Future<bool> setUserOrganizationInfoAsync(SetUserOrganizationInfoRequest request) async {
		var rpcRst = await call("SetUserOrganizationInfoAsync", request);
		return rpcRst;
	}

	Future<bool> alterPersonInfoAsync(AlterPersonInfoRequest request) async {
		var rpcRst = await call("AlterPersonInfoAsync", request);
		return rpcRst;
	}

	Future<PageResult<ShareDeviceUserDTO>> getShareDeviceUsersAsync(GetShareDeviceUsersPageRequest request) async {
		var rpcRst = await call("GetShareDeviceUsersAsync", request);
		var result = PageResult<ShareDeviceUserDTO>.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<List<UserFeatureInfoResult>> getUserFeatureListAsync(TokenRequest request) async {
		var rpcRst = await call("GetUserFeatureListAsync", request);
		var result = (rpcRst as List).map((e)=>UserFeatureInfoResult.fromJson(e as Map<String, dynamic>)).toList();
		return result;
	}

	Future<UserInfoByCodeDTO> getUserByCodeAsync(GetUserByCodeRequest request) async {
		var rpcRst = await call("GetUserByCodeAsync", request);
		var result = UserInfoByCodeDTO.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<bool> isDefaultPasswordAsync(TokenRequest request) async {
		var rpcRst = await call("IsDefaultPasswordAsync", request);
		return rpcRst;
	}

	Future<bool> setCommonSettingsAsync(CommonSettingsRequest request) async {
		var rpcRst = await call("SetCommonSettingsAsync", request);
		return rpcRst;
	}

	Future<bool> refreshStaticticRecordsAsync(RefreshStaticticRecordsRequest request) async {
		var rpcRst = await call("RefreshStaticticRecordsAsync", request);
		return rpcRst;
	}

	Future<List<ClientScheduleDTO>> findSchedulesAsync(FindSchedulesRequest request) async {
		var rpcRst = await call("FindSchedulesAsync", request);
		var result = (rpcRst as List).map((e)=>ClientScheduleDTO.fromJson(e as Map<String, dynamic>)).toList();
		return result;
	}

	Future<PageResult<MessageExtendInfoDTO>> getMessagesPageAsync(QueryMessageListRequest request) async {
		var rpcRst = await call("GetMessagesPageAsync", request);
		var result = PageResult<MessageExtendInfoDTO>.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<bool> setMessageDeliveryAsync(SetMessageDeliveryRequest request) async {
		var rpcRst = await call("SetMessageDeliveryAsync", request);
		return rpcRst;
	}

	Future<bool> batchSetMessageStatusAsync(SetMessageInfoReqeust request) async {
		var rpcRst = await call("BatchSetMessageStatusAsync", request);
		return rpcRst;
	}

	Future<int> getActiveUsersCount() async {
		var rpcRst = await call("GetActiveUsersCount", );
		return rpcRst;
	}

	Future<PageResult<AnnouncementExtendInfoDTO>> queryAnnouncementsByPageAsync(QueryAnnouncementListRequest request) async {
		var rpcRst = await call("QueryAnnouncementsByPageAsync", request);
		var result = PageResult<AnnouncementExtendInfoDTO>.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<AnnouncementExtendInfoDTO> getAnnouncementInfoAsync(GetAnnouncementRequest request) async {
		var rpcRst = await call("GetAnnouncementInfoAsync", request);
		var result = AnnouncementExtendInfoDTO.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<NoReadMessagesDTO> getNoReadMessagesAsync(GetNoReadMessagesRequest request) async {
		var rpcRst = await call("GetNoReadMessagesAsync", request);
		var result = NoReadMessagesDTO.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<bool> removeUserSingleTokenAsync(RemoveUserSingleTokenRequest request) async {
		var rpcRst = await call("RemoveUserSingleTokenAsync", request);
		return rpcRst;
	}

	Future<bool> batchInsertUserDataAsync(BatchInsertUserRequest request) async {
		var rpcRst = await call("BatchInsertUserDataAsync", request);
		return rpcRst;
	}

	Future<bool> batchUpdateUserOrganizationAsync(BatchInsertUserRequest request) async {
		var rpcRst = await call("BatchUpdateUserOrganizationAsync", request);
		return rpcRst;
	}

	Future<MigrateRecordDTO> queryMigrateTimeAsync(QueryMigrateTimeRequest request) async {
		var rpcRst = await call("QueryMigrateTimeAsync", request);
		var result = MigrateRecordDTO.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<bool> commonUserLogOffAsync(CommonLogOffRequest request) async {
		var rpcRst = await call("CommonUserLogOffAsync", request);
		return rpcRst;
	}

	Future<PageResult<UserGroupDTO>> getUserGroupPagesAsync(GetUserGroupPagesRequest request) async {
		var rpcRst = await call("GetUserGroupPagesAsync", request);
		var result = PageResult<UserGroupDTO>.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<UserGroupDTO> getUserGroupAsync(GetUserGroupRequest request) async {
		var rpcRst = await call("GetUserGroupAsync", request);
		var result = UserGroupDTO.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<PageResult<UserExtendDTO>> getGroupUserInfosAsync(GetGroupUserInfosRequest request) async {
		var rpcRst = await call("GetGroupUserInfosAsync", request);
		var result = PageResult<UserExtendDTO>.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<PageResult<DeviceInfoDTO>> getGroupDeviceInfosAsync(GetGroupDeviceInfosRequest request) async {
		var rpcRst = await call("GetGroupDeviceInfosAsync", request);
		var result = PageResult<DeviceInfoDTO>.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<PageResult<OrganizationSimplifyDTO>> getGroupOrganizationsAsync(GetGroupOrganizationsRequest request) async {
		var rpcRst = await call("GetGroupOrganizationsAsync", request);
		var result = PageResult<OrganizationSimplifyDTO>.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<PageResult<SimpleRecordInfoDTO>> getUserGroupRecordPagesAsync(GetUserGroupRecordPagesRequest request) async {
		var rpcRst = await call("GetUserGroupRecordPagesAsync", request);
		var result = PageResult<SimpleRecordInfoDTO>.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<PackagesDTO> getPackageByUniquedCodeAsync(GetPackageByUniquedCodeRequest request) async {
		var rpcRst = await call("GetPackageByUniquedCodeAsync", request);
		var result = PackagesDTO.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<String> addOrUpdatePackageAsync(AddOrUpdatePackageRequest request) async {
		var rpcRst = await call("AddOrUpdatePackageAsync", request);
		return rpcRst;
	}

}