import 'dart:io';
import 'dart:typed_data';
import 'package:dio/dio.dart' as dio_package;
import 'package:dio/dio.dart';
import 'package:image_gallery_saver/image_gallery_saver.dart';
import 'package:sk_base_mobile/apis/api.dart';
import 'package:image_picker/image_picker.dart';
import 'package:sk_base_mobile/config.dart';
import 'package:sk_base_mobile/models/upload_result.model.dart';
import 'package:sk_base_mobile/services/service.dart';

class MediaUtil {
  static String? getMediaUrl(String? url) {
    if ((url ?? '').isEmpty) {
      return null;
    } else {
      return '${GloablConfig.OSS_URL}$url';
    }
  }

  //拍照
  Future<XFile?> getImageFromCamera(
      {double? maxWidth, bool isFront = false}) async {
    XFile? pickedFile;
    try {
      if (AppInfoService.to.isCameraing.value) {
        return null;
      }
      AppInfoService.to.isCameraing.value = true;
      pickedFile = await ImagePicker().pickImage(
          source: ImageSource.camera,
          maxWidth: maxWidth ?? 2000,
          preferredCameraDevice:
              isFront ? CameraDevice.front : CameraDevice.rear);
      AppInfoService.to.isCameraing.value = false;
    } catch (e) {
      AppInfoService.to.isCameraing.value = false;
    }
    return pickedFile;
  }

  //相册选择 单张
  Future<XFile?> getImageFromGallery() async {
    if (AppInfoService.to.isCameraing.value) {
      return null;
    }
    AppInfoService.to.isCameraing.value = true;
    XFile? pickedFile = await ImagePicker().pickImage(
      source: ImageSource.gallery,
    );
    AppInfoService.to.isCameraing.value = false;
    return pickedFile;
  }

  Future<UploadResultModel?> uploadImg(File imgfile,
      {int? bussinessRecordId, String? bussinessModule}) async {
    dio_package.Response response = await Api.uploadImg(imgfile);
    if (response.data != null && response.data['filename'] != null) {
      return UploadResultModel.fromJson(response.data["filename"]);
    }
    return null;
  }

  // 保存到相册
  Future saveImageToPhotoLib({required String imgUrl, String? filename}) async {
    var response = await DioService.dio
        .get(imgUrl, options: Options(responseType: ResponseType.bytes));
    final result = await ImageGallerySaver.saveImage(
        Uint8List.fromList(response.data),
        quality: 60);
    return result;
  }
  // // 上传一张照片
  // Future<String> uploadMediaWithProgress(
  //     File imgfile, Function onProgress) async {
  //   Response response = await Api.uploadMediaWithProgress(imgfile, onProgress);
  //   if (response.data != null && response.data['code'] == 200) {
  //     return response.data['data']['url'];
  //   } else {
  //     throw Exception('上传照片失败');
  //   }
  // }

  // // 上传多张照片
  // Future<List<String>> uploadMultiImgs(List<File> imgfiles) async {
  //   Response response = await Api.uploadMultiImgs(imgfiles);
  //   List<String> urlList = [];
  //   if (response.data != null && response.data['code'] == 200) {
  //     String url = response.data['data']['url'];
  //     urlList = url.split(',');
  //     return urlList;
  //   } else {
  //     throw Exception('上传照片失败');
  //   }
  // }

  // ///选取视频
  // Future<XFile?> getVideoFromGallery() async {
  //   if (AppInfoModel().isCameraing) {
  //     return null;
  //   }
  //   XFile? pickedFile =
  //       await ImagePicker().pickVideo(source: ImageSource.gallery);
  //   if (pickedFile != null) {
  //     var path = pickedFile.path;
  //     if (Platform.isAndroid) {
  //       var newPath = path.replaceAll('.jpg', '.mp4');
  //       File(path).renameSync(newPath);
  //       return XFile(newPath);
  //     }
  //   }
  //   return pickedFile;
  // }

  // /*拍摄视频*/
  // Future takeVideoFromCamera() async {
  //   var image = await ImagePicker().getVideo(source: ImageSource.camera);
  //   print('拍摄视频:' + image.toString());
  // }

  // /// 生成视频缩略图
  // Future<String> generateLogoUrl(String videoUrl) async {
  //   File file = await generateLogoFile(videoUrl: videoUrl);
  //   return await MediaUtil().uploadImg(file);
  // }

  // /// 生成视频缩略图
  // Future<File> generateLogoFile({String? videoUrl, String? videoPath}) async {
  //   Directory fileDic = await getApplicationDocumentsDirectory();

  //   String? path = await VideoThumbnail.thumbnailFile(
  //     video: videoUrl ?? videoPath!,
  //     imageFormat: ImageFormat.JPEG,
  //     thumbnailPath: fileDic.path,
  //     // maxWidth: 200,
  //     //     64, // specify the height of the thumbnail, let the width auto-scaled to keep the source aspect ratio
  //     quality: 100,
  //   );
  //   return File(path!);
  // }

  // /// 获取文件类型Video/audio/image
  // MediaTypeEnum getMediaTypeBySuffix(String? url) {
  //   if (url == null || url == '') {
  //     return MediaTypeEnum.IMAGE;
  //   }
  //   String suffix = url.split('.')[url.split('.').length - 1].toLowerCase();
  //   if (videoSuffix.contains(suffix)) {
  //     return MediaTypeEnum.VIDEO;
  //   } else if (audioSuffix.contains(suffix)) {
  //     return MediaTypeEnum.AUDIO;
  //   }
  //   return MediaTypeEnum.IMAGE;
  // }

  // List<String> videoSuffix = [
  //   'avi',
  //   'wmv',
  //   'mpg',
  //   'mpeg',
  //   'mov',
  //   'rm',
  //   'ram',
  //   'swf',
  //   'flv',
  //   'mp4'
  // ];
  // List<String> audioSuffix = [
  //   'aac',
  //   'mp3',
  //   'cda',
  //   'wav',
  //   'wma',
  //   'ra',
  //   'rma',
  //   'ape',
  //   'asf',
  //   'mid',
  //   'midi',
  //   'rmi',
  //   'xmi',
  //   'ogg',
  //   'ape',
  //   'aiff',
  //   'au'
  // ];
  // List<String> imageSuffix = [
  //   'webp',
  //   'bmp',
  //   'pcx',
  //   'tif',
  //   'gif',
  //   'jpeg',
  //   'tga',
  //   'exif',
  //   'fpx',
  //   'svg',
  //   'psd',
  //   'cdr',
  //   'png',
  //   'ogg',
  //   'ape',
  //   'aiff',
  //   'au',
  //   'jpg'
  // ];
}