import 'dart:core';

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


import 'recordInfo.m.dart';
import 'liveConsultation.m.dart';
import 'remedical.m.dart';
import 'patient.m.dart';
import 'organization.m.dart';


class RemoteUltrasoundService extends JsonRpcClientBase {
	RemoteUltrasoundService(
		String host, {
		String serviceName = "IRemoteUltrasoundService",
		Map<String, String>? headers,
		int? timeout,
	}) : super(
						host,
						serviceName,
						headers: headers,
						timeout: timeout,
				) {
		/// 注册响应实体反序列化处理器
		FJsonConvert.setDecoder((map) => PageResult<SimpleRecordInfoDTO>.fromJson(map));
		FJsonConvert.setDecoder((map) => SimpleRecordInfoDTO.fromJson(map));
		FJsonConvert.setDecoder((map) => QueryRecordResult.fromJson(map));
		FJsonConvert.setDecoder((map) => RemedicalListResult.fromJson(map));
		FJsonConvert.setDecoder((map) => PageResult<RemedicalListResult>.fromJson(map));
		FJsonConvert.setDecoder((map) => RemedicalInfoDTO.fromJson(map));
		FJsonConvert.setDecoder((map) => ClientPatientInfoDTO.fromJson(map));
		FJsonConvert.setDecoder((map) => LangugeDataResult.fromJson(map));
		FJsonConvert.setDecoder((map) => RemedicalMeasuredInfoDTO.fromJson(map));
		FJsonConvert.setDecoder((map) => MeasureSystemSettingDTO.fromJson(map));
		FJsonConvert.setDecoder((map) => MeasureApplicationDTO.fromJson(map));
		FJsonConvert.setDecoder((map) => CommentItemResultDTO.fromJson(map));
	}

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

	Future<QueryRecordResult> vitalQueryRecordInfoAsync(QueryRecordRequest request) async {
		var rpcRst = await call("VitalQueryRecordInfoAsync", request);
		var result = QueryRecordResult.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<RemedicalListResult> vitalGetRemedicalListByRecordInfoAsync(QueryRecordRequest request) async {
		var rpcRst = await call("VitalGetRemedicalListByRecordInfoAsync", request);
		var result = RemedicalListResult.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<PageResult<RemedicalListResult>> vitalGetRemedicalListPagesAsync(GetRecordsPageRequest request) async {
		var rpcRst = await call("VitalGetRemedicalListPagesAsync", request);
		var result = PageResult<RemedicalListResult>.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<RemedicalInfoDTO> vitalFindRemedicalByCodeAsync(FindRemedicalByCodeRequest request) async {
		var rpcRst = await call("VitalFindRemedicalByCodeAsync", request);
		var result = RemedicalInfoDTO.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<ClientPatientInfoDTO> vitalFindPatientByCodeAsync(FindPatientByCodeRequest request) async {
		var rpcRst = await call("VitalFindPatientByCodeAsync", request);
		var result = ClientPatientInfoDTO.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

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

	Future<List<RemedicalMeasuredInfoDTO>> vitalFindRemedicalMeasuredInfoAsync(FindRemedicalMeasuredInfoRequest request) async {
		var rpcRst = await call("VitalFindRemedicalMeasuredInfoAsync", request);
		var result = (rpcRst as List).map((e)=>RemedicalMeasuredInfoDTO.fromJson(e as Map<String, dynamic>)).toList();
		return result;
	}

	Future<bool> vitalAddRemedicalMeasuredInfoAsync(AddRemedicalMeasuredInfoRequest request) async {
		var rpcRst = await call("VitalAddRemedicalMeasuredInfoAsync", request);
		return rpcRst;
	}

	Future<MeasureSystemSettingDTO> vitalGetMeasureSystemSettingAsync(GetMeasureSystemSettingRequest request) async {
		var rpcRst = await call("VitalGetMeasureSystemSettingAsync", request);
		var result = MeasureSystemSettingDTO.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<MeasureApplicationDTO> vitalGetMeasureApplicationAsync(GetMeasureApplicationRequest request) async {
		var rpcRst = await call("VitalGetMeasureApplicationAsync", request);
		var result = MeasureApplicationDTO.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<CommentItemResultDTO> vitalGetCommentsByApplicationAsync(GetCommentsByApplicationRequest request) async {
		var rpcRst = await call("VitalGetCommentsByApplicationAsync", request);
		var result = CommentItemResultDTO.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

}