import 'dart:io';

import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:open_file/open_file.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/views/widgets/loaders/image_loader.dart';
import 'package:url_launcher/url_launcher.dart';

class MultiFilesPickerItem extends StatelessWidget {
  final File file;
  final bool enabled;
  final Function(File) onRemoveTap;

  const MultiFilesPickerItem({Key? key, required this.file, required this.enabled, required this.onRemoveTap}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    bool isImage = file.path.split(".").last.toLowerCase() == "png" || file.path.split(".").last.toLowerCase() == "jpg" || file.path.split(".").last.toLowerCase() == "jpeg";
    bool isPdf = file.path.split(".").last.toLowerCase() == "pdf";
    bool isExcel = file.path.split(".").last.toLowerCase() == "xlsx";

    return SizedBox(
      width: 54.toScreenWidth,
      height: 51.toScreenWidth,
      child: Stack(
        alignment: AlignmentDirectional.topEnd,
        children: [
          Container(
            margin: EdgeInsetsDirectional.only(top: 4.toScreenHeight, end: 6.toScreenWidth),
            decoration: BoxDecoration(
              color: AppColor.neutral90,
              border: Border.all(width: 1, color: context.isDark ? AppColor.neutral30 : AppColor.neutral30),
              image: DecorationImage(
                image: getImage(isImage, isPdf, isExcel, file),
                fit: BoxFit.cover,
              ),
              borderRadius: BorderRadius.circular(8),
            ),
            child: MaterialButton(
              padding: EdgeInsets.zero,
              onPressed: () async {
                if (isImage) {
                  Navigator.of(context).push(
                    MaterialPageRoute(
                      builder: (_) => Scaffold(
                        appBar: const DefaultAppBar(),
                        body: SafeArea(
                          child: InteractiveViewer(
                            child: _isLocalUrl(file.path)
                                ? Image.file(file)
                                : ImageLoader(
                                    url: URLs.getFileUrl(file.path),
                                    boxFit: BoxFit.cover,
                                  ),
                          ).center,
                        ),
                      ),
                    ),
                  );
                } else if (_isLocalUrl(file.path)) {
                  OpenFile.open(file.path);
                } else {
                  if (!await launchUrl(Uri.parse(URLs.getFileUrl(file.path)!), mode: LaunchMode.externalApplication)) {
                    Fluttertoast.showToast(msg: "UnExpected Error with file.");
                    throw Exception('Could not launch');
                  }
                }
              },
            ),
          ),
          if (enabled)
            InkWell(
              child: "remove".toSvgAsset(width: 16),
              onTap: () {
                onRemoveTap(file);
              },
            )
        ],
      ),
    );
  }

  ImageProvider getImage(bool isImage, bool isPdf, bool isExcel, File file) {
    if (isImage) {
      if (_isLocalUrl(file.path)) {
        return FileImage(file);
      }
      return NetworkImage(URLs.getFileUrl(file.path)!);
    }
    return AssetImage("assets/images/${isPdf ? "pdf" : isExcel ? "excel" : "doc"}.png");
  }

  bool _isLocalUrl(String url) {
    if (url.isEmpty != false) return false;
    return url.startsWith("/") || url.startsWith("file://") || url.substring(1).startsWith(':\\');
  }
}
