import '../department.dart';
import '../hospital.dart';
import '../lookup.dart';

class DeviceTransferInfo {
  String? userId;
  String? comment;
  Hospital? client;
  Department? department;
  String? workingHours;
  String? travelingHours;
  String? name;
  String? signature;
  Lookup? status;

  DeviceTransferInfo({
    this.userId,
    this.comment,
    this.department,
    this.client,
    this.name,
    this.travelingHours,
    this.workingHours,
    this.signature,
    this.status,
  });

  Map<String, String> toJson(bool isSender) {
    Map<String, String> body = {};
    final baseKey = isSender ? "sender_" : "receiver_";

    if (comment?.isNotEmpty ?? false) body["${baseKey}comment"] = comment!;
    if (workingHours?.isNotEmpty ?? false) {
      body["${baseKey}working_hours"] = workingHours!;
    }
    if (travelingHours?.isNotEmpty ?? false) {
      body["${baseKey}travel_hours"] = comment!;
    }
    final status = this.status;
    if (status != null) body["${baseKey}status"] = status.id.toString();
    if (signature?.isNotEmpty ?? false) body["${baseKey}image"] = signature!;
    return body;
  }

  bool validate() {
    if (client == null) return false;
    if (department == null) return false;
    return true;
  }

  fromDetails(DeviceTransferInfo? old, {bool withSignature = true}) {
    userId = old?.userId;
    name = old?.name;
    client = old?.client != null ? Hospital.fromHospital(old?.client) : null;
    department = department != null ? Department.fromDepartment(old?.department!) : null;
    workingHours = old?.workingHours;
    travelingHours = old?.travelingHours;
    comment = old?.comment;
    if (withSignature) signature = old?.signature;
    status = old?.status;
  }

  factory DeviceTransferInfo.fromJson(Map<String, dynamic> parsedJson, String key) {
    return DeviceTransferInfo(
      workingHours: parsedJson["${key}working_hours"],
      travelingHours: parsedJson["${key}travel_hours"],
      name: parsedJson["${key}name"],
      signature: parsedJson["${key}image"],
      userId: parsedJson["${key}id"],
      comment: parsedJson["${key}comment"],
      client: Hospital.fromJson(parsedJson["${key}client"]),
      department: Department.fromJson(parsedJson["${key}department"]),
      status: Lookup.fromJson(parsedJson["${key}status"]),
    );
  }
}
