import 'dart:convert';
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:healthcare_user/Reports/allreports.dart';
import 'package:healthcare_user/common/settings.dart';
import 'package:healthcare_user/common/zoom_image.dart';
import 'package:image_picker/image_picker.dart';
import 'package:multi_image_picker/multi_image_picker.dart';

class FindingImages extends StatefulWidget {
  var imageDetails;
  var recordId;

  FindingImages({this.imageDetails, this.recordId});

  @override
  State<FindingImages> createState() => _FindingImagesState();
}

class _FindingImagesState extends State<FindingImages> {
  final ImagePicker imagePicker = ImagePicker();
  List imageFileList = [];
  List uiFindingsImages = [];
  final ImagePicker _picker = ImagePicker();

  /* Future pickImageFromGallery() async {
    imageFileList = [];
    final List<XFile>? selectedImages = await imagePicker.pickMultiImage();
    AppSettings.preLoaderDialog(context);
    if (selectedImages!.isNotEmpty) {
      imageFileList.addAll(selectedImages);
    }

    var res = await AppSettings.updateFindingsGallery(imageFileList,widget.recordId);
    print(jsonDecode(res));
    Navigator.of(context, rootNavigator: true).pop();
    setState(() {
      widget.imageDetails = jsonDecode(res)['findings'];
    });
  }

  Future takeImageFromCamera() async {
    try {
      final image = await _picker.pickImage(source: ImageSource.camera);
      if (image == null) return;
      final imageTemp = File(image.path);
      AppSettings.preLoaderDialog(context);
      var res = await AppSettings.updateFindingsCamera(image,widget.recordId);
      print(jsonDecode(res));
      Navigator.of(context, rootNavigator: true).pop();
      setState(() {
        widget.imageDetails = jsonDecode(res)['findings'];
      });
    } on PlatformException catch (e) {
      print('Failed to pick image: $e');
    }
  }*/

  Future pickImageFromGalleryForUpdate() async {
    imageFileList = [];
    final List<XFile>? selectedImages = await imagePicker.pickMultiImage();
    AppSettings.preLoaderDialog(context);
    if (selectedImages!.isNotEmpty) {
      imageFileList.addAll(selectedImages);
    }

    var res =
        await AppSettings.updateFindingsGallery(imageFileList, widget.recordId);
    print(jsonDecode(res));
    Navigator.of(context, rootNavigator: true).pop();
    setState(() {
      widget.imageDetails = jsonDecode(res)['findings'];
    });
  }

  Future takeImageFromCameraForUpdate() async {
    try {
      final image = await _picker.pickImage(source: ImageSource.camera);
      if (image == null) return;
      final imageTemp = File(image.path);
      AppSettings.preLoaderDialog(context);
      var res = await AppSettings.updateFindingsCamera(image, widget.recordId);
      print(jsonDecode(res));
      Navigator.of(context, rootNavigator: true).pop();
      setState(() {
        widget.imageDetails = jsonDecode(res)['findings'];
      });
    } on PlatformException catch (e) {
      print('Failed to pick image: $e');
    }
  }

  Widget renderUi() {
    if (widget.imageDetails.length != 0) {
      return Column(
        crossAxisAlignment: CrossAxisAlignment.end,
        children: [
          Expanded(
              child: GridView.builder(
            itemCount: widget.imageDetails.length,
            gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
              crossAxisCount: 3,
              crossAxisSpacing: 2.0,
              mainAxisSpacing: 2.0,
            ),
            itemBuilder: (BuildContext context, int index) {
              return GestureDetector(
                onTap: () {
                  Navigator.push(
                      context,
                      new MaterialPageRoute(
                          builder: (__) => new ImageZoomPage(
                              imageName: 'Findings',
                              imageDetails: widget.imageDetails[index]
                                  ['url'])));
                  /*gridOntap(index);*/
                },
                child: Container(
                  width: MediaQuery.of(context).size.width * .30,
                  height: MediaQuery.of(context).size.height * .15,
                  decoration: BoxDecoration(
                      shape: BoxShape.rectangle,
                      image: DecorationImage(
                          image: NetworkImage(widget.imageDetails[index]['url'])
                              as ImageProvider, // picked file
                          fit: BoxFit.fill)),
                  child: Stack(children: [
                    Positioned(
                      right: 0,
                      child: Container(
                        child: IconButton(
                          iconSize: 30,
                          icon: const Icon(
                            Icons.delete,
                            color: Colors.red,
                          ),
                          onPressed: () async {
                            showDialog(
                              barrierDismissible: false,
                              context: context,
                              builder: (BuildContext context) => AlertDialog(
                                title:
                                    const Text('Do you want to delete image?',
                                        style: TextStyle(
                                          color: primaryColor,
                                          fontSize: 20,
                                        )),
                                actionsAlignment:
                                    MainAxisAlignment.spaceBetween,
                                actions: [
                                  TextButton(
                                    onPressed: () async {
                                      AppSettings.preLoaderDialog(context);

                                      String fileName = widget
                                          .imageDetails[index]['url']
                                          .split('/')
                                          .last;

                                      var payload = new Map<String, dynamic>();
                                      payload["urlType"] = 'findings';
                                      payload["url"] =
                                          widget.imageDetails[index]['url'];

                                      // bool deleteStatus = await AppSettings.deleteRecordsNew(payload,widget.recordId);
                                      try {
                                        var res =
                                            await AppSettings.deleteRecordsNew(
                                                payload, widget.recordId);
                                        print(jsonDecode(res));
                                        Navigator.of(context,
                                                rootNavigator: true)
                                            .pop();
                                        Navigator.of(context).pop(true);
                                        AppSettings.longSuccessToast(
                                            "Image deleted Successfully");
                                        setState(() {
                                          widget.imageDetails =
                                              jsonDecode(res)['remainingUrls'];
                                        });
                                      } catch (e) {
                                        print(e);
                                        Navigator.of(context,
                                                rootNavigator: true)
                                            .pop();
                                        Navigator.of(context).pop(true);
                                        AppSettings.longFailedToast(
                                            "Image deletion failed");
                                      }
                                    },
                                    child: const Text('Yes',
                                        style: TextStyle(
                                          color: primaryColor,
                                          fontSize: 20,
                                        )),
                                  ),
                                  TextButton(
                                    onPressed: () {
                                      Navigator.of(context).pop(true);
                                    },
                                    child: const Text('No',
                                        style: TextStyle(
                                          color: primaryColor,
                                          fontSize: 20,
                                        )),
                                  ),
                                ],
                              ),
                            );
                          },
                        ),
                        /* color: Colors.pinkAccent,
                      width: 35,
                      height: 35,*/
                      ),
                    )
                  ]),
                ),

                //Image.network(widget.imageDetails[index]['url']),
              );
            },
          )),
          Padding(
            padding: EdgeInsets.fromLTRB(8, 8, 8, 8),
            child: CircleAvatar(
              backgroundColor: primaryColor,
              radius: 40,
              child: Column(
                mainAxisSize: MainAxisSize.min,
                children: <Widget>[
                  IconButton(
                    iconSize: 40,
                    icon: const Icon(
                      Icons.add,
                      color: Colors.white,
                    ),
                    onPressed: () async {
                      showModalBottomSheet<void>(
                          context: context,
                          builder: (BuildContext context) {
                            return SizedBox(
                              height: 200,
                              child: Center(
                                child: Row(
                                  mainAxisAlignment: MainAxisAlignment.center,
                                  children: <Widget>[
                                    GestureDetector(
                                      child: Icon(
                                        Icons.camera_alt_outlined,
                                        size: 100,
                                        color: primaryColor,
                                      ),
                                      onTap: () async {
                                        await takeImageFromCameraForUpdate();
                                        Navigator.pop(context);
                                      },
                                    ),
                                    SizedBox(
                                      width: MediaQuery.of(context).size.width * .20,
                                    ),
                                    GestureDetector(
                                      child: Icon(
                                        Icons.photo,
                                        size: 100,
                                        color: primaryColor,
                                      ),
                                      onTap: () async {
                                        await pickImageFromGalleryForUpdate();
                                        Navigator.pop(context);
                                      },
                                    ),
                                  ],
                                ),
                              ),
                            );
                          });
                    },
                  ),
                ],
              ),
            ),
          ),
        ],
      );
    } else {
      return Center(
          child: Padding(
        padding: EdgeInsets.fromLTRB(0, 40, 0, 0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            SizedBox(
              height: MediaQuery.of(context).size.height * .25,
            ),
            Text('Click below icon to add new findings'),
            SizedBox(
              height: 20,
            ),
            CircleAvatar(
              backgroundColor: primaryColor,
              radius: 40,
              child: IconButton(
                iconSize: 40,
                icon: const Icon(
                  Icons.add,
                  color: Colors.white,
                ),
                onPressed: () async {
                  showModalBottomSheet<void>(
                      context: context,
                      builder: (BuildContext context) {
                        return SizedBox(
                          height: 200,
                          child: Center(
                            child: Row(
                              mainAxisAlignment: MainAxisAlignment.center,
                              children: <Widget>[
                                GestureDetector(
                                  child: Icon(
                                    Icons.camera_alt_outlined,
                                    size: 100,
                                    color: primaryColor,
                                  ),
                                  onTap: () async {
                                    await takeImageFromCameraForUpdate();
                                    Navigator.pop(context);
                                  },
                                ),
                                SizedBox(
                                  width:
                                      MediaQuery.of(context).size.width * .20,
                                ),
                                GestureDetector(
                                  child: Icon(
                                    Icons.photo,
                                    size: 100,
                                    color: primaryColor,
                                  ),
                                  onTap: () async {
                                    await pickImageFromGalleryForUpdate();
                                    Navigator.pop(context);
                                  },
                                ),
                              ],
                            ),
                          ),
                        );
                      });
                },
              ),
            )
          ],
        ),
      ));
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppSettings.appBar('Findings'),
      body: Container(padding: EdgeInsets.all(12.0), child: renderUi()),
    );
  }
}
