import 'dart:io';

import 'package:cached_network_image/cached_network_image.dart';
import 'package:chat/configs/app_colors.dart';
import 'package:chat/constants/message_constant.dart';
import 'package:chat/views/conversation/preview/image_widget.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:tencent_im_sdk_plugin/models/v2_tim_image.dart';
import 'package:tencent_im_sdk_plugin/models/v2_tim_message.dart';

class ShowImageMessage extends StatelessWidget {
  final V2TimMessage message;

  const ShowImageMessage(this.message, {Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      decoration: const BoxDecoration(
        borderRadius: BorderRadius.all(Radius.circular(4)),
      ),
      constraints: BoxConstraints(
        maxWidth: Get.width * 0.362,
        minWidth: 64,
        maxHeight: 192,
      ),
      clipBehavior: Clip.hardEdge,
      child: _imageBuilder(),
    );
  }

  Widget _imageBuilder() {
    var path = message.imageElem!.path!;
    var list = message.imageElem!.imageList!;

    V2TimImage? small = list.where((e) => e!.type == 2).first;
    V2TimImage? big = list.where((e) => e!.type == 1).first;
    V2TimImage? original = list.where((e) => e!.type == 0).first;

    /// 如果是从本机发出去的图片消息，并且图片还存在的情况
    if (path.isNotEmpty && File(path).existsSync()) {
      return _showLocalImageFile(path, original!.localUrl!);
    } else if (small != null && File(small.localUrl!).existsSync()) {
      return _showLocalImageFile(small.localUrl!, original!.localUrl!);
    } else if (big != null && File(big.localUrl!).existsSync()) {
      return _showLocalImageFile(big.localUrl!, original!.localUrl!);
    } else if (original != null && File(original.localUrl!).existsSync()) {
      return _showLocalImageFile(original.localUrl!, original.localUrl!);
    } else {
      return GestureDetector(
        onTap: () {
          Get.to(
            PreviewImageWidget(
              type: IMG_PREVIEW_TYPE.url,
              path: big!.url!,
              original: original!.url!,
            ),
            transition: Transition.zoom,
          );
        },
        child: CachedNetworkImage(
          imageUrl: small!.url!,
          cacheKey: 'CHAT_IMAGE',
          alignment: Alignment.topCenter,
          errorWidget: (context, error, stackTrace) => _errorDisplay(),
        ),
      );
    }
  }

  Widget _showLocalImageFile(String path, String original) {
    return GestureDetector(
      onTap: () {
        Get.to(
          PreviewImageWidget(
            type: IMG_PREVIEW_TYPE.local,
            path: path,
            original: original,
          ),
          transition: Transition.zoom,
        );
      },
      child: Image.file(
        File(path),
        fit: BoxFit.fitWidth,
      ),
    );
  }

  Widget _errorDisplay() {
    return Container(
      decoration: BoxDecoration(
        borderRadius: BorderRadius.circular(4),
        border: Border.all(
          width: 0.4,
          color: AppColors.unactive,
        ),
      ),
      height: 96,
      child: Center(
        child: Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: const [
            Icon(
              Icons.warning_amber_outlined,
              size: 20,
              color: AppColors.unactive,
            ),
            SizedBox(width: 4),
            Text(
              '图片加载失败',
              style: TextStyle(
                color: AppColors.unactive,
                fontSize: 12,
              ),
            ),
          ],
        ),
      ),
    );
  }
}
