import 'dart:io';
import 'dart:typed_data';

import 'package:clean/model/asset_info.dart';
import 'package:intl/intl.dart';
import 'package:wechat_assets_picker/wechat_assets_picker.dart';

import 'file_utils.dart';

class ImageUtil {

  // 生成月份 key (用于内部存储)
  static String getMonthKey(DateTime date) {
    return '${date.year}-${date.month.toString().padLeft(2, '0')}';
  }

  // 格式化月份显示 (例如: Jan 2025)
  static String formatMonthKey(String monthKey) {
    final parts = monthKey.split('-');
    if (parts.length == 2) {
      final date = DateTime(int.parse(parts[0]), int.parse(parts[1]));
      return DateFormat('MMM yyyy').format(date);
    }
    return monthKey;
  }

  // 获取指定索引的月份显示文本
  static String getMonthText(Map<String, List<AssetInfo>> assets, int index) {
    final monthKeys = assets.keys.toList()
      ..sort((a, b) => b.compareTo(a)); // 最新的月份在前

    if (index < monthKeys.length) {
      return formatMonthKey(monthKeys[index]);
    }
    return '';
  }

  // 获取指定月份的图片
  static List<AssetInfo> getMonthAssets(Map<String, List<AssetInfo>> assets, int index) {
    final monthKeys = assets.keys.toList()
      ..sort((a, b) => b.compareTo(a)); // 最新的月份在前

    if (index < monthKeys.length) {
      return assets[monthKeys[index]] ?? [];
    }
    return [];
  }

  // 获取缩略图数据
  static Future<Uint8List?> getImageThumbnail(AssetInfo asset) async {
    try {
      // 先尝试从本地读取缩略图
      final localThumb = await FileUtils.getThumbData(asset.createDateSecond!);
      if (localThumb != null) {
        return localThumb;
      }

      // 如果本地没有，则从 AssetEntity 获取
      return await asset.thumbnailData;
    } catch (e) {
      print('获取缩略图失败: $e');
      return null;
    }
  }

  // 获取原始图片文件
  static Future<File?> getImageFile(AssetInfo asset) async {
    try {
      // 先尝试从本地读取
      final assetPath = await FileUtils.getAssetPath();
      final localFile = File('$assetPath/${asset.createDateSecond}.jpg');
      if (await localFile.exists()) {
        return localFile;
      }

      // 如果本地没有，则从 AssetEntity 获取
      return await asset.file;
    } catch (e) {
      print('获取图片文件失败: $e');
      return null;
    }
  }
}