import 'package:flutter/material.dart';
import 'package:geojson/geojson.dart';
import 'package:get/get.dart';
import 'package:rogapp/model/destination.dart';
import 'package:rogapp/pages/destination/destination_controller.dart';
import 'package:rogapp/pages/index/index_controller.dart';
import 'package:rogapp/utils/const.dart';
import 'package:rogapp/utils/database_helper.dart';
import 'package:rogapp/widgets/bottom_sheet_new.dart';
import 'package:rogapp/widgets/bottom_sheet_widget.dart';
import 'package:sqflite/sqlite_api.dart';
import 'package:timeline_tile/timeline_tile.dart';

class DestinationWidget extends StatelessWidget {
  DestinationWidget({ Key? key }) : super(key: key);

  final DestinationController destinationController = Get.find<DestinationController>();

  final IndexController indexController = Get.find<IndexController>();

  final List<int> _items = List<int>.generate(50, (int index) => index);

  Image getImage(int index){
    if(destinationController.destinations[index].photos== null || destinationController.destinations[index].photos == ""){
      return Image(image: AssetImage('assets/images/empty_image.png'));
    }
    else{
      print("------- image is ${destinationController.destinations[index].photos!}------");
      String _photo = destinationController.destinations[index].photos!;
        if(_photo.contains('http')){
          return Image(image: NetworkImage(
            destinationController.destinations[index].photos!),
            errorBuilder: (BuildContext context, Object exception, StackTrace? stackTrace) {
              return Image.asset("assets/images/empty_image.png");
            },
          );
        }
        else {
          String server_url = ConstValues.currentServer();
          return Image(image: NetworkImage(
             '${server_url}/media/' + destinationController.destinations[index].photos!),
            errorBuilder: (BuildContext context, Object exception, StackTrace? stackTrace) {
              return Image.asset("assets/images/empty_image.png");
            },
          );
        }
      
    }
  }

  // bool getSelection(int index){
  //   bool ret = false;
  //   destinationController.destination_index_data.forEach((element) {
  //     if(index == element["index"]){
  //       if(element["selected"] == true){
  //         ret = true;
  //         return;
  //       }
  //     }
  //   });
  //   return ret;
  // }

  void doDelete() {
    destinationController.currentSelectedDestinations.forEach((element) {
      destinationController.deleteDestination(element);
      destinationController.resetRogaining();
    });
    // destinationController.destination_index_data.forEach((element) {
    //   //print(element["index"]);
    //   destinationController.deleteDestination(element["index"]);
    // });
    // destinationController.destination_index_data.clear();
  }

  void moveUp() {
    Destination? d = null;
    for(Destination ad in destinationController.destinations){
      if(ad.selected == true){
        d = ad;
        break;
      }
    }
    if(d != null){
      print("--- selected destination is ${d.list_order}");
      destinationController.makeOrder(d, -1);
    }
  }

  void moveDown() {
    Destination? d = null;
    for(Destination ad in destinationController.destinations){
      if(ad.selected == true){
        d = ad;
        break;
      }
    }
    if(d != null){
      print("--- selected destination is ${d.list_order}");
      destinationController.makeOrder(d, 1);
    }
  }

  void clearall(){
    Get.defaultDialog(
      title: "are_you_sure_want_to_delete_all".tr,
      middleText: "all_added_destination_will_be_deleted".tr,
      backgroundColor: Colors.blue.shade300,
      titleStyle: TextStyle(color: Colors.white),
      middleTextStyle: TextStyle(color: Colors.white),
      textConfirm: "confirm".tr,
      textCancel: "cancel".tr,
      cancelTextColor: Colors.white,
      confirmTextColor: Colors.blue,
      buttonColor: Colors.white,
      barrierDismissible: false,
      radius: 10,
      content: Column(
          children:   [
                      ],
                    ),
      onConfirm: (){
        destinationController.deleteAllDestinations();
        Get.back();
        Get.snackbar("deleted".tr, "all_destinations_are_deleted_successfully".tr);              
        }
                            );
  }

  void interChange() {
    // int first_index = -1;
    // destinationController.destination_index_data.forEach((element) {
    //   //print(element["index"]);
    //   int action_id = destinationController.destinations[element["index"]]["id"] as int;
    //   destinationController.makeOrder(action_id, (element["index"] as int) + 1, "up");

    // });
  }

  Future getIsLocationAvilable(int location_id) async {
    DatabaseHelper db = DatabaseHelper.instance;
    return await db.isAlreadyAvailable(location_id);
  }

  @override
  Widget build(BuildContext context) {

    print("------ destination widget------ ${destinationController.destinationCount.value} ----------");

    return 
        Obx(() => 
          Stack(
          children: [
              Padding(
              padding: const EdgeInsets.only(top:45.0),
              child: ListView.builder( 
                  itemCount: destinationController.destinationCount.value,
                  itemBuilder: (BuildContext context, int index) {
                  return
                    TimelineTile(
                    alignment: TimelineAlign.manual,
                    lineXY: 0.2,
                    isFirst: index == 0 ? true : false,
                    indicatorStyle: IndicatorStyle(
                      indicator: CircleAvatar(
                        child: Text(destinationController.destinations[index].list_order.toString(), style: TextStyle(color: Colors.white),),
                        backgroundColor: Colors.red,
                      ),
                    ),
                    key: Key(index.toString()),
                    endChild: Card(
                      child: Container(
                        constraints: const BoxConstraints(
                          minHeight: 80,
                            ),
                        child: ListTile(
                          onTap: () async {
                            {
                              Destination? fs = destinationController.destinations[index];
                                print("----fsf-----${index}");
                                if(fs != null){
                                  
                                  if(indexController.currentDestinationFeature.isNotEmpty) {
                                    indexController.currentDestinationFeature.clear();
                                  }
                                  indexController.currentDestinationFeature.add(fs);
                                  print("--- ndexController.currentDestinationFeature ----- ${ indexController.currentDestinationFeature[0].name} ----");
                                  //indexController.getAction();
                          
                                  showModalBottomSheet(context: context, isScrollControlled: true, 
                                    //builder:((context) => BottomSheetWidget())
                                    builder:((context) => BottomSheetNew())
                                  );
                                }
                            };
                          },
                          onLongPress: (){
                            destinationController.toggleSelection(destinationController.destinations[index]); 
                          },
                          selectedTileColor: Colors.amberAccent,
                          selected:destinationController.destinations[index].selected!,
                          leading: getImage(index),
                          title: Text(destinationController.destinations[index].name!),
                          subtitle: Text(destinationController.destinations[index].category!),
                        ),
                      ),
                    ),
                    startChild: 
                      index > 0 && destinationController.matrix["routes"][0]["legs"] != null ?
                      Column(
                        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                        children: [
                          Text(destinationController.matrix["routes"][0]["legs"][index -1]["distance"] != null ? destinationController.matrix["routes"][0]["legs"][index-1]["distance"]["text"].toString(): ''),
                          Text(destinationController.matrix["routes"][0]["legs"][index -1]["duration"] != null ? destinationController.matrix["routes"][0]["legs"][index-1]["duration"]["text"].toString() : '')
                        ],
                      ):
                      Container()
                      ,
                  );
                  
                }
              ),
            ),
              Container(
                decoration: BoxDecoration(
                  boxShadow: [
                    BoxShadow(
                      color: Colors.grey.withOpacity(0.3),
                      spreadRadius: 5,
                      blurRadius: 3,
                      offset: Offset(0, 7), // changes position of shadow
                    ),
                  ],
                ),
                height: 44.0,
                width: MediaQuery.of(context).size.width,
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    IconButton(
                      icon:Icon(Icons.delete_forever),
                      //onPressed: (){doDelete();},
                     onPressed: clearall,
                    ),
                    IconButton(
                      icon:Icon(Icons.cancel),
                      //onPressed: (){doDelete();},
                     onPressed: destinationController.currentSelectedDestinations.length > 0 ? doDelete : null,
                    ),
                    IconButton(
                      icon:Icon(Icons.move_up),
                      onPressed: destinationController.currentSelectedDestinations.length > 0 ? moveUp : null,
                    ),
                    IconButton(
                      icon:Icon(Icons.move_down),
                      onPressed: destinationController.currentSelectedDestinations.length > 0 ? moveDown : null,
                    ),
                    // IconButton(
                    //   icon:Icon(Icons.sync),
                    //   onPressed: destinationController.destination_index_data.length == 2 ? interChange : null,
                    // ),
                  ],
                ),
              )
          ],
        )
        );
  }
}