import 'package:freezed_annotation/freezed_annotation.dart';

/// 서버와 클라이언트 간 장비 상태 코드 변환 유틸리티
class EquipmentStatusConverter {
  /// 서버 상태 코드를 클라이언트 상태 코드로 변하
  static String serverToClient(String? serverStatus) {
    if (serverStatus == null) return 'E';
    
    switch (serverStatus.toLowerCase()) {
      case 'available':
        return 'I'; // 입고
      case 'inuse':
        return 'O'; // 출고 (사용 중인 장비는 출고 상태로 표시)
      case 'maintenance':
        return 'R'; // 수리
      case 'disposed':
        return 'D'; // 손상
      default:
        return 'E'; // 기타
    }
  }
  
  /// 클라이언트 상태 코드를 서버 상태 코드로 변환
  static String clientToServer(String? clientStatus) {
    if (clientStatus == null) return 'available';
    
    switch (clientStatus) {
      case 'I': // 입고
        return 'available';
      case 'O': // 출고
        return 'inuse';  // 출고된 장비는 사용 중(inuse) 상태
      case 'T': // 대여
        return 'inuse';
      case 'R': // 수리
        return 'maintenance';
      case 'D': // 손상
        return 'disposed';
      case 'L': // 분실
        return 'disposed';
      case 'E': // 기타
        return 'available';
      default:
        return 'available';
    }
  }
}

/// Freezed JsonConverter for equipment status
class EquipmentStatusJsonConverter implements JsonConverter<String, String> {
  const EquipmentStatusJsonConverter();

  @override
  String fromJson(String json) {
    return EquipmentStatusConverter.serverToClient(json);
  }

  @override
  String toJson(String object) {
    return EquipmentStatusConverter.clientToServer(object);
  }
}