import 'package:flutter/material.dart';

/// 동적 카테고리 매핑을 위한 유틸리티 클래스
class CategoryMapper {
  static const Map<String, IconData> _iconMap = {
    // 주요 카테고리
    '한식': Icons.rice_bowl,
    '중식': Icons.ramen_dining,
    '중국요리': Icons.ramen_dining,
    '일식': Icons.set_meal,
    '일본요리': Icons.set_meal,
    '양식': Icons.restaurant,
    '아시안': Icons.soup_kitchen,
    '아시아음식': Icons.soup_kitchen,
    '패스트푸드': Icons.fastfood,
    '카페': Icons.local_cafe,
    '디저트': Icons.cake,
    '카페/디저트': Icons.local_cafe,
    '술집': Icons.local_bar,
    '주점': Icons.local_bar,
    '분식': Icons.fastfood,
    '치킨': Icons.egg,
    '피자': Icons.local_pizza,
    '베이커리': Icons.bakery_dining,
    '해물': Icons.set_meal,
    '해산물': Icons.set_meal,
    '고기': Icons.kebab_dining,
    '육류': Icons.kebab_dining,
    '채식': Icons.eco,
    '비건': Icons.eco,
    '브런치': Icons.brunch_dining,
    '뷔페': Icons.dining,
    // 기본값
    '기타': Icons.restaurant_menu,
    '음식점': Icons.restaurant_menu,
  };

  static const Map<String, Color> _colorMap = {
    // 주요 카테고리
    '한식': Color(0xFFE53935),
    '중식': Color(0xFFFF6F00),
    '중국요리': Color(0xFFFF6F00),
    '일식': Color(0xFF43A047),
    '일본요리': Color(0xFF43A047),
    '양식': Color(0xFF1E88E5),
    '아시안': Color(0xFF8E24AA),
    '아시아음식': Color(0xFF8E24AA),
    '패스트푸드': Color(0xFFFDD835),
    '카페': Color(0xFF6D4C41),
    '디저트': Color(0xFFEC407A),
    '카페/디저트': Color(0xFF6D4C41),
    '술집': Color(0xFF546E7A),
    '주점': Color(0xFF546E7A),
    '분식': Color(0xFFFF7043),
    '치킨': Color(0xFFFFB300),
    '피자': Color(0xFFE91E63),
    '베이커리': Color(0xFF8D6E63),
    '해물': Color(0xFF00ACC1),
    '해산물': Color(0xFF00ACC1),
    '고기': Color(0xFFD32F2F),
    '육류': Color(0xFFD32F2F),
    '채식': Color(0xFF689F38),
    '비건': Color(0xFF388E3C),
    '브런치': Color(0xFFFFA726),
    '뷔페': Color(0xFF7B1FA2),
    // 기본값
    '기타': Color(0xFF757575),
    '음식점': Color(0xFF757575),
  };

  /// 카테고리에 해당하는 아이콘 반환
  static IconData getIcon(String category) {
    // 완전 일치 검색
    if (_iconMap.containsKey(category)) {
      return _iconMap[category]!;
    }

    // 부분 일치 검색 (키워드 포함)
    for (final entry in _iconMap.entries) {
      if (category.contains(entry.key) || entry.key.contains(category)) {
        return entry.value;
      }
    }

    // 기본 아이콘
    return Icons.restaurant_menu;
  }

  /// 카테고리에 해당하는 색상 반환
  static Color getColor(String category) {
    // 완전 일치 검색
    if (_colorMap.containsKey(category)) {
      return _colorMap[category]!;
    }

    // 부분 일치 검색 (키워드 포함)
    for (final entry in _colorMap.entries) {
      if (category.contains(entry.key) || entry.key.contains(category)) {
        return entry.value;
      }
    }

    // 카테고리 문자열 기반 색상 생성 (일관된 색상)
    final hash = category.hashCode;
    final hue = (hash % 360).toDouble();
    return HSVColor.fromAHSV(1.0, hue, 0.6, 0.8).toColor();
  }

  /// 카테고리 표시명 정규화
  static String getDisplayName(String category) {
    // 긴 카테고리명 축약
    if (category.length > 10) {
      // ">"로 구분된 경우 마지막 부분만 사용
      if (category.contains('>')) {
        final parts = category.split('>');
        return parts.last.trim();
      }
      // 공백으로 구분된 경우 첫 단어만 사용
      if (category.contains(' ')) {
        return category.split(' ').first;
      }
    }
    return category;
  }

  /// 네이버 카테고리 파싱 및 정규화
  static String normalizeNaverCategory(String category, String? subCategory) {
    // 카테고리가 "음식점"인 경우 subCategory 사용
    if (category == '음식점' && subCategory != null && subCategory.isNotEmpty) {
      return subCategory;
    }

    // ">"로 구분된 카테고리의 경우 가장 구체적인 부분 사용
    if (category.contains('>')) {
      final parts = category.split('>').map((s) => s.trim()).toList();
      // 마지막 부분이 가장 구체적
      return parts.last;
    }

    return category;
  }
}
