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 'P'; // 폐기
      default:
        return 'E'; // 기타
    }
  }
  
  /// 클라이언트 상태 코드를 서버 상태 코드로 변환
  static String clientToServer(String? clientStatus) {
    print('DEBUG [EquipmentStatusConverter.clientToServer] Input: "$clientStatus" (${clientStatus.runtimeType})');
    
    // null이거나 'null' 문자열인 경우 처리
    if (clientStatus == null || clientStatus == 'null' || clientStatus.isEmpty) {
      print('DEBUG [EquipmentStatusConverter.clientToServer] Null/empty input, returning "available"');
      return 'available';
    }
    
    final result = switch (clientStatus) {
      'I' => 'available', // 입고
      'O' => 'inuse',     // 출고 (사용 중인 장비는 출고 상태로 표시)
      'T' => 'inuse',     // 대여
      'R' => 'maintenance', // 수리
      'D' => 'disposed',  // 손상
      'L' => 'disposed',  // 분실
      'P' => 'disposed',  // 폐기
      'E' => 'available', // 기타
      _ => 'available',   // 기본값
    };
    
    print('DEBUG [EquipmentStatusConverter.clientToServer] Output: "$result"');
    return result;
  }
}

/// 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);
  }
}