import 'dart:core';

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

import 'storage.m.dart';


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

	Future<bool> uploadFileAsync(StorageRequest request) async {
		var rpcRst = await call("UploadFileAsync", request);
		return rpcRst;
	}

	Future<StorageServiceSettingDTO> getAuthorizationAsync(FileServiceRequest request) async {
		var rpcRst = await call("GetAuthorizationAsync", request);
		var result = StorageServiceSettingDTO.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<StorageServiceSettingDTO> getStorageTestUrlAsync(CheckStorageRequest request) async {
		var rpcRst = await call("GetStorageTestUrlAsync", request);
		var result = StorageServiceSettingDTO.fromJson(rpcRst as Map<String, dynamic>);
		return result;
	}

	Future<bool> checkFileIsExist(CheckFileIsExistRequest request) async {
		var rpcRst = await call("CheckFileIsExist", request);
		return rpcRst;
	}

	Future<List<String>> copyToOtherNodeAysnc(CopyToOtherNodeRequest request) async {
		var rpcRst = await call("CopyToOtherNodeAysnc", request);
		var result = (rpcRst as List).cast<String>().toList();
		return result;
	}

	Future<List<String>> uploadFileByServerConfigAsync(UploadFileTransferRequest request) async {
		var rpcRst = await call("UploadFileByServerConfigAsync", request);
		var result = (rpcRst as List).cast<String>().toList();
		return result;
	}

}