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

class CreatePatientExtensionRequest extends TokenRequest{
	String? patientCode;
	String? key;
	String? extensionData;

	CreatePatientExtensionRequest({
		this.patientCode,
		this.key,
		this.extensionData,
		String? token,
	}) : super(
			token: token,
		);

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

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

class PatientExtensionDTO extends BaseDTO{
	String? code;
	String? patientCode;
	String? key;
	String? extensionData;

	PatientExtensionDTO({
		this.code,
		this.patientCode,
		this.key,
		this.extensionData,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory PatientExtensionDTO.fromJson(Map<String, dynamic> map) {
		return PatientExtensionDTO( 
			code: map['Code'],
			patientCode: map['PatientCode'],
			key: map['Key'],
			extensionData: map['ExtensionData'],
			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
			updateTime: map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,
		);
	}

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

class GetPatientExtensionRequest extends TokenRequest{
	String? code;

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

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

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

class GetPatientExtensionByCodeAndKeyRequest extends TokenRequest{
	String? key;
	String? patientCode;

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

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

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

class PatientExtensionPageRequest extends PageRequest{

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

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

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

class RemovePatientExtensionRequest extends TokenRequest{
	String? code;

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

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

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

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

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

	factory GetPatientExtensionListRequest.fromJson(Map<String, dynamic> map) {
		return GetPatientExtensionListRequest( 
			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 UpdatePatientExtensionRequest extends TokenRequest{
	String? code;
	String? patientCode;
	String? key;
	String? extensionData;

	UpdatePatientExtensionRequest({
		this.code,
		this.patientCode,
		this.key,
		this.extensionData,
		String? token,
	}) : super(
			token: token,
		);

	factory UpdatePatientExtensionRequest.fromJson(Map<String, dynamic> map) {
		return UpdatePatientExtensionRequest( 
			code: map['Code'],
			patientCode: map['PatientCode'],
			key: map['Key'],
			extensionData: map['ExtensionData'],
			token: map['Token'],
		);
	}

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