import 'dart:core';

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

import 'vitalTemplate.m.dart';

import 'vitalSystemSetting.m.dart';
import 'device.m.dart';


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

	Future<String> createTemplateAsync(CreateTemplateRequest request) async {
		var rpcRst = await call("CreateTemplateAsync", request);
		return rpcRst;
	}

	Future<TemplateDTO> getTemplateDetailAsync(GetTemplateRequest request) async {
		var rpcRst = await call("GetTemplateDetailAsync", request);
		var result = TemplateDTO.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<TemplateDTO> getTemplateDetailByKeyAsync(GetTemplateByKeyRequest request) async {
		var rpcRst = await call("GetTemplateDetailByKeyAsync", request);
		var result = TemplateDTO.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<PageCollection<TemplateDTO>> getTemplatePageAsync(TemplatePageRequest request) async {
		var rpcRst = await call("GetTemplatePageAsync", request);
		var result = PageCollection<TemplateDTO>.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<bool> removeTemplateAsync(RemoveTemplateRequest request) async {
		var rpcRst = await call("RemoveTemplateAsync", request);
		return rpcRst;
	}

	Future<List<TemplateDTO>> getTemplateListAsync(GetTemplateListRequest request) async {
		var rpcRst = await call("GetTemplateListAsync", request);
		var result = (rpcRst as List).map((e)=>TemplateDTO.fromJson(e as Map<String, dynamic>)).toList();
		return result;
	}

	Future<bool> updateTemplateAsync(UpdateTemplateRequest request) async {
		var rpcRst = await call("UpdateTemplateAsync", request);
		return rpcRst;
	}

	Future<TemplateDTO> getLastOneTemplateByKeyAsync(GetLastOneTemplateByKeyRequest request) async {
		var rpcRst = await call("GetLastOneTemplateByKeyAsync", request);
		var result = TemplateDTO.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

}