import 'dart:core';

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

import 'organization.m.dart';

import 'liveConsultation.m.dart';
import 'device.m.dart';


class OrganizationService extends JsonRpcClientBase {
	OrganizationService(
		String host, {
		String serviceName = "IOrganizationService",
		Map<String, String>? headers,
		int? timeout,
	}) : super(
						host,
						serviceName,
						headers: headers,
						timeout: timeout,
				) {
		/// 注册响应实体反序列化处理器
		FJsonConvert.setDecoder((map) => OrganizationDTO.fromJson(map));
		FJsonConvert.setDecoder((map) => PageResult<OrganizationDTO>.fromJson(map));
		FJsonConvert.setDecoder((map) => OrganizationBaseDTO.fromJson(map));
		FJsonConvert.setDecoder((map) => PageResult<OrganizationBaseDTO>.fromJson(map));
		FJsonConvert.setDecoder((map) => OrganizationBasicDTO.fromJson(map));
		FJsonConvert.setDecoder((map) => OrganizationSettingResult.fromJson(map));
		FJsonConvert.setDecoder((map) => ServerSettingResult.fromJson(map));
		FJsonConvert.setDecoder((map) => LangugeDataResult.fromJson(map));
		FJsonConvert.setDecoder((map) => PageCollection<OrganizationSimplifyDTO>.fromJson(map));
		FJsonConvert.setDecoder((map) => OrganizationSimplifyDTO.fromJson(map));
	}

	Future<List<OrganizationDTO>> searchOrganizationsAsync(SearchOrganizationsRequest request) async {
		var rpcRst = await call("SearchOrganizationsAsync", request);
		var result = (rpcRst as List).map((e)=>OrganizationDTO.fromJson(e as Map<String, dynamic>)).toList();
		return result;
	}

	Future<PageResult<OrganizationDTO>> searchOrganizationPagesAsync(SearchOrganizationsRequest request) async {
		var rpcRst = await call("SearchOrganizationPagesAsync", request);
		var result = PageResult<OrganizationDTO>.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<OrganizationDTO> getOrganizationByCodeAsync(GetOrganizationByCodeRequest request) async {
		var rpcRst = await call("GetOrganizationByCodeAsync", request);
		var result = OrganizationDTO.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<List<OrganizationBaseDTO>> getParentOrganizationListAsync(GetParentOrganizationListRequest request) async {
		var rpcRst = await call("GetParentOrganizationListAsync", request);
		var result = (rpcRst as List).map((e)=>OrganizationBaseDTO.fromJson(e as Map<String, dynamic>)).toList();
		return result;
	}

	Future<PageResult<OrganizationBaseDTO>> findOrganizationsByPageAsync(FindOrganizationListRequest request) async {
		var rpcRst = await call("FindOrganizationsByPageAsync", request);
		var result = PageResult<OrganizationBaseDTO>.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<PageResult<OrganizationBaseDTO>> findPatientOrganizationsByPageAsync(FindPatientOrganizationsByPageRequest request) async {
		var rpcRst = await call("FindPatientOrganizationsByPageAsync", request);
		var result = PageResult<OrganizationBaseDTO>.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<OrganizationBasicDTO> getPersonOrganizationAsync(GetPersonOrganizationRequest request) async {
		var rpcRst = await call("GetPersonOrganizationAsync", request);
		var result = OrganizationBasicDTO.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<bool> savePersonOrganizationAsync(SavePersonOrganizationRequest request) async {
		var rpcRst = await call("SavePersonOrganizationAsync", request);
		return rpcRst;
	}

	Future<bool> addOrganizationsAsync(AddOrganizationsRequest request) async {
		var rpcRst = await call("AddOrganizationsAsync", request);
		return rpcRst;
	}

	Future<bool> removeOrganizationsAsync(RemoveOrganizationsRequest request) async {
		var rpcRst = await call("RemoveOrganizationsAsync", request);
		return rpcRst;
	}

	Future<bool> updateOrganizationNameAsync(UpdateOrganizationNameRequest request) async {
		var rpcRst = await call("UpdateOrganizationNameAsync", request);
		return rpcRst;
	}

	Future<OrganizationSettingResult> getOrganizationSettingAsync(GetUserOrganizationSettingRequest request) async {
		var rpcRst = await call("GetOrganizationSettingAsync", request);
		var result = OrganizationSettingResult.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<ServerSettingResult> getServerSettingAsync(TokenRequest request) async {
		var rpcRst = await call("GetServerSettingAsync", request);
		var result = ServerSettingResult.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<List<LangugeDataResult>> getLangugeDataListAsync(LangugeDataRequest request) async {
		var rpcRst = await call("GetLangugeDataListAsync", request);
		var result = (rpcRst as List).map((e)=>LangugeDataResult.fromJson(e as Map<String, dynamic>)).toList();
		return result;
	}

	Future<PageCollection<OrganizationSimplifyDTO>> getOrganizationByUserAndDevicesAsync(GetOrganizationByUserAndDevicesRequest request) async {
		var rpcRst = await call("GetOrganizationByUserAndDevicesAsync", request);
		var result = PageCollection<OrganizationSimplifyDTO>.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<OrganizationDTO> queryOrganizationsByShortCodeAsync(QueryOrganizationsRequest request) async {
		var rpcRst = await call("QueryOrganizationsByShortCodeAsync", request);
		var result = OrganizationDTO.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

}