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

class CreateTemplateRequest extends TokenRequest{
	String? code;
	String? templateName;
	TemplateTypeEnum templateType;
	String? key;
	String? templateContent;

	CreateTemplateRequest({
		this.code,
		this.templateName,
		this.templateType = TemplateTypeEnum.Form,
		this.key,
		this.templateContent,
		String? token,
	}) : super(
			token: token,
		);

	factory CreateTemplateRequest.fromJson(Map<String, dynamic> map) {
		return CreateTemplateRequest( 
			code: map['Code'],
			templateName: map['TemplateName'],
			templateType: TemplateTypeEnum.values.firstWhere((e) => e.index == map['TemplateType']),
			key: map['Key'],
			templateContent: map['TemplateContent'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		if (templateName != null)
			map['TemplateName'] = templateName;
		map['TemplateType'] = templateType.index;
		if (key != null)
			map['Key'] = key;
		if (templateContent != null)
			map['TemplateContent'] = templateContent;
		return map;
	}
}

class GetTemplateRequest extends TokenRequest{
	String? code;

	GetTemplateRequest({
		this.code,
		String? token,
	}) : super(
			token: token,
		);

	factory GetTemplateRequest.fromJson(Map<String, dynamic> map) {
		return GetTemplateRequest( 
			code: map['Code'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		return map;
	}
}

class GetTemplateByKeyRequest extends TokenRequest{
	String? key;
	String? value;

	GetTemplateByKeyRequest({
		this.key,
		this.value,
		String? token,
	}) : super(
			token: token,
		);

	factory GetTemplateByKeyRequest.fromJson(Map<String, dynamic> map) {
		return GetTemplateByKeyRequest( 
			key: map['Key'],
			value: map['Value'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (key != null)
			map['Key'] = key;
		if (value != null)
			map['Value'] = value;
		return map;
	}
}

class TemplatePageRequest extends PageRequest{

	TemplatePageRequest({
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory TemplatePageRequest.fromJson(Map<String, dynamic> map) {
		return TemplatePageRequest( 
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class RemoveTemplateRequest extends TokenRequest{
	String? code;

	RemoveTemplateRequest({
		this.code,
		String? token,
	}) : super(
			token: token,
		);

	factory RemoveTemplateRequest.fromJson(Map<String, dynamic> map) {
		return RemoveTemplateRequest( 
			code: map['Code'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		return map;
	}
}

class GetTemplateListRequest extends TokenRequest{
	List<String>? codes;

	GetTemplateListRequest({
		this.codes,
		String? token,
	}) : super(
			token: token,
		);

	factory GetTemplateListRequest.fromJson(Map<String, dynamic> map) {
		return GetTemplateListRequest( 
			codes: map['Codes']?.cast<String>().toList(),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (codes != null)
			map['Codes'] = codes;
		return map;
	}
}

class UpdateTemplateRequest extends TokenRequest{
	String? code;
	String? templateName;
	TemplateTypeEnum templateType;
	String? key;
	String? templateContent;

	UpdateTemplateRequest({
		this.code,
		this.templateName,
		this.templateType = TemplateTypeEnum.Form,
		this.key,
		this.templateContent,
		String? token,
	}) : super(
			token: token,
		);

	factory UpdateTemplateRequest.fromJson(Map<String, dynamic> map) {
		return UpdateTemplateRequest( 
			code: map['Code'],
			templateName: map['TemplateName'],
			templateType: TemplateTypeEnum.values.firstWhere((e) => e.index == map['TemplateType']),
			key: map['Key'],
			templateContent: map['TemplateContent'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		if (templateName != null)
			map['TemplateName'] = templateName;
		map['TemplateType'] = templateType.index;
		if (key != null)
			map['Key'] = key;
		if (templateContent != null)
			map['TemplateContent'] = templateContent;
		return map;
	}
}

class GetLastOneTemplateByKeyRequest extends TokenRequest{
	String? key;

	GetLastOneTemplateByKeyRequest({
		this.key,
		String? token,
	}) : super(
			token: token,
		);

	factory GetLastOneTemplateByKeyRequest.fromJson(Map<String, dynamic> map) {
		return GetLastOneTemplateByKeyRequest( 
			key: map['Key'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (key != null)
			map['Key'] = key;
		return map;
	}
}