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

class PositionDTO extends BaseDTO{
	String? positionCode;
	String? positionName;
	String? organizationCode;
	List<String>? underUserCodes;
	String? fitDepartmentCode;

	PositionDTO({
		this.positionCode,
		this.positionName,
		this.organizationCode,
		this.underUserCodes,
		this.fitDepartmentCode,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory PositionDTO.fromJson(Map<String, dynamic> map) {
		return PositionDTO( 
			positionCode: map['PositionCode'],
			positionName: map['PositionName'],
			organizationCode: map['OrganizationCode'],
			underUserCodes: map['UnderUserCodes']?.cast<String>().toList(),
			fitDepartmentCode: map['FitDepartmentCode'],
			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 (positionCode != null)
			map['PositionCode'] = positionCode;
		if (positionName != null)
			map['PositionName'] = positionName;
		if (organizationCode != null)
			map['OrganizationCode'] = organizationCode;
		if (underUserCodes != null)
			map['UnderUserCodes'] = underUserCodes;
		if (fitDepartmentCode != null)
			map['FitDepartmentCode'] = fitDepartmentCode;
		return map;
	}
}

class GetPositionsRequest extends TokenRequest{
	List<String>? positionCodes;
	List<String>? organizationCodes;
	String? fitDepartmentCode;

	GetPositionsRequest({
		this.positionCodes,
		this.organizationCodes,
		this.fitDepartmentCode,
		String? token,
	}) : super(
			token: token,
		);

	factory GetPositionsRequest.fromJson(Map<String, dynamic> map) {
		return GetPositionsRequest( 
			positionCodes: map['PositionCodes']?.cast<String>().toList(),
			organizationCodes: map['OrganizationCodes']?.cast<String>().toList(),
			fitDepartmentCode: map['FitDepartmentCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (positionCodes != null)
			map['PositionCodes'] = positionCodes;
		if (organizationCodes != null)
			map['OrganizationCodes'] = organizationCodes;
		if (fitDepartmentCode != null)
			map['FitDepartmentCode'] = fitDepartmentCode;
		return map;
	}
}

class PositionItemDTO {
	String? positionName;
	String? organizationCode;
	List<String>? underUserCodes;
	String? fitDepartmentCode;
	String? extendsData;

	PositionItemDTO({
		this.positionName,
		this.organizationCode,
		this.underUserCodes,
		this.fitDepartmentCode,
		this.extendsData,
	});

	factory PositionItemDTO.fromJson(Map<String, dynamic> map) {
		return PositionItemDTO( 
			positionName: map['PositionName'],
			organizationCode: map['OrganizationCode'],
			underUserCodes: map['UnderUserCodes']?.cast<String>().toList(),
			fitDepartmentCode: map['FitDepartmentCode'],
			extendsData: map['ExtendsData'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (positionName != null) {
			map['PositionName'] = positionName;
		}
		if (organizationCode != null) {
			map['OrganizationCode'] = organizationCode;
		}
		if (underUserCodes != null) {
			map['UnderUserCodes'] = underUserCodes;
		}
		if (fitDepartmentCode != null) {
			map['FitDepartmentCode'] = fitDepartmentCode;
		}
		if (extendsData != null) {
			map['ExtendsData'] = extendsData;
		}
		return map;
	}
}

class AddPositionsRequest {
	String? token;
	List<PositionItemDTO>? positions;

	AddPositionsRequest({
		this.token,
		this.positions,
	});

	factory AddPositionsRequest.fromJson(Map<String, dynamic> map) {
		return AddPositionsRequest( 
			token: map['Token'],
			positions: map['Positions'] != null ? (map['Positions'] as List).map((e)=>PositionItemDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (token != null) {
			map['Token'] = token;
		}
		if (positions != null) {
			map['Positions'] = positions;
		}
		return map;
	}
}

class RemovePositionRequest extends TokenRequest{
	List<String>? positionCodes;

	RemovePositionRequest({
		this.positionCodes,
		String? token,
	}) : super(
			token: token,
		);

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

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

class UpdatePositionNameRequest extends TokenRequest{
	String? positionCode;
	String? positionName;
	String? fitDepartmentCode;

	UpdatePositionNameRequest({
		this.positionCode,
		this.positionName,
		this.fitDepartmentCode,
		String? token,
	}) : super(
			token: token,
		);

	factory UpdatePositionNameRequest.fromJson(Map<String, dynamic> map) {
		return UpdatePositionNameRequest( 
			positionCode: map['PositionCode'],
			positionName: map['PositionName'],
			fitDepartmentCode: map['FitDepartmentCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (positionCode != null)
			map['PositionCode'] = positionCode;
		if (positionName != null)
			map['PositionName'] = positionName;
		if (fitDepartmentCode != null)
			map['FitDepartmentCode'] = fitDepartmentCode;
		return map;
	}
}