import 'package:test_sa/models/department.dart';
import 'package:test_sa/models/hospital.dart';
import 'package:test_sa/models/lookup.dart';

import '../timer_model.dart';

class DeviceTransferInfo {
  String userId;
  String comment;
  Hospital client;
  Department department;
  String workingHours;
  // DateTime startDate;
  // DateTime endDate;
  String travelingHours;
  String userName;
  String signature;
  String assignedEmployeeName;
  Lookup status;
  TimerModel timer;

  DeviceTransferInfo({
    this.userId,
    this.comment,
    this.department,
    this.client,
    this.userName,
    this.travelingHours,
    // this.startDate,
    // this.endDate,
    this.workingHours,
    this.signature,
    this.status,
    this.assignedEmployeeName,
    this.timer,
  });

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

    if (comment != null && comment.isNotEmpty) body["${baseKey}comment"] = comment;
    if (workingHours != null && workingHours.isNotEmpty) body["${baseKey}working_hours"] = workingHours;
    // if (startDate != null) body["${baseKey}start_date"] = startDate?.toIso8601String();
    // if (endDate != null) body["${baseKey}end_date"] = endDate?.toIso8601String();
    if (timer?.startAt != null) body["${baseKey}start_date"] = timer?.startAt?.toIso8601String();
    if (timer?.endAt != null) body["${baseKey}end_date"] = timer?.endAt?.toIso8601String();
    if (travelingHours != null && travelingHours.isNotEmpty) body["${baseKey}travel_hours"] = travelingHours;
    if (status != null) body["${baseKey}status"] = status.id.toString();
    if (signature != null && signature.isNotEmpty) 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;
    userName = old.userName;
    client = Hospital.fromHospital(old.client);
    department = Department.fromDepartment(old.department);
    workingHours = old.workingHours;
    // startDate = old.startDate;
    // endDate = old.endDate;
    timer = old.timer;
    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"],
      // startDate: parsedJson["${key}start_date"],
      // endDate: parsedJson["${key}end_date"],
      timer: TimerModel(
        startAt: DateTime.tryParse(parsedJson["${key}start_date"] ?? ""),
        endAt: DateTime.tryParse(parsedJson["${key}end_date"] ?? ""),
        durationInSecond: ((parsedJson["${key}working_hours"] ?? 0) * 60 * 60).toInt(),
        stopped: parsedJson["${key}working_hours"] == null || (parsedJson["${key}working_hours"] as String).isEmpty ? null : true,
      ),
      travelingHours: parsedJson["${key}travel_hours"],
      userName: parsedJson["${key}name"],
      signature: parsedJson["${key}image"],
      userId: parsedJson["${key}id"],
      comment: parsedJson["${key}comment"],
      assignedEmployeeName: parsedJson["${key}AssignedEmployeeName"],
      client: Hospital(id: parsedJson["${key}SiteId"], name: parsedJson["${key}SiteName"]),
      department: Department(
        id: parsedJson["${key}DepartmentId"],
        name: parsedJson["${key}DepartmentName"],
      ),
      status: Lookup(
        id: parsedJson["${key}status"],
        name: parsedJson["${key}status"],
      ),
    );
  }
}
