enum AccessType {
  onlineOnetime,
  onlineMultiple,
  offlineOnetime,
  offlineMultiple,
}

extension AccessTypeExtension on AccessType {
  String get value {
    switch (this) {
      case AccessType.onlineOnetime:
        return "Online Password";
      case AccessType.onlineMultiple:
        return "online Multiple Password";
      case AccessType.offlineOnetime:
        return "Offline Onetime Password";
      case AccessType.offlineMultiple:
        return "Offline Multiple Password";
    }
  }

  static AccessType fromString(String value) {
    switch (value) {
      case "ONLINE_ONETIME":
        return AccessType.onlineOnetime;
      case "ONLINE_MULTIPLE":
        return AccessType.onlineMultiple;
      case "OFFLINE_ONETIME":
        return AccessType.offlineOnetime;
      case "OFFLINE_MULTIPLE":
        return AccessType.offlineMultiple;
      default:
        throw ArgumentError("Invalid access type: $value");
    }
  }
}

enum DeviseStatus {
  online,
  offline,
}

extension OnlineTypeExtension on DeviseStatus {
  String get value {
    switch (this) {
      case DeviseStatus.online:
        return "Online";
      case DeviseStatus.offline:
        return "Offline";
    }
  }

  static DeviseStatus fromString(bool value) {
    switch (value) {
      case false:
        return DeviseStatus.offline;
      case true:
        return DeviseStatus.online;
      default:
        throw ArgumentError("Invalid access type: $value");
    }
  }
}

enum AccessStatus {
  expired,
  effective,
  toBeEffective,
}

extension AccessStatusExtension on AccessStatus {
  String get value {
    switch (this) {
      case AccessStatus.expired:
        return "Expired";
      case AccessStatus.effective:
        return "Effective";
      case AccessStatus.toBeEffective:
        return "To be effective";
    }
  }

  static AccessStatus fromString(String value) {
    switch (value) {
      case "EXPIRED":
        return AccessStatus.expired;
      case "EFFECTIVE":
        return AccessStatus.effective;
      case "TO_BE_EFFECTIVE":
        return AccessStatus.toBeEffective;
      default:
        throw ArgumentError("Invalid access type: $value");
    }
  }
}

enum TempModes { hot, cold, wind }

enum FanSpeeds { auto, low, middle, high }

enum AcValuesEnums {
  Cooling,
  Heating,
  Ventilation,
}

enum EnumEffectivePeriodOptions {
  allDay,
  daytime,
  night,
  custom,
  none,
}
