import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:tasktracker/Data.dart';
import 'package:tasktracker/NewProject.dart';
import 'Dialogs.dart';
import 'User.dart' as User;
import 'main.dart';
class Projects extends StatefulWidget {
  const Projects({Key? key}) : super(key: key);

  @override
  State<Projects> createState() => _ProjectsState();
}

class _ProjectsState extends State<Projects> {
  var refreshSub;
  @override void initState() {
    // TODO: implement initState
    super.initState();

    refreshSub = User.refreshStream.stream.listen((event) {
        setState(() {

        });
    });
  }

  @override void dispose() {
    // TODO: implement dispose
    super.dispose();
    refreshSub?.close();
  }

  @override
  Widget build(BuildContext context) {
    return SafeArea(child: Scaffold(
      floatingActionButton: FloatingActionButton.extended(
          onPressed: () {
            Navigator.of(context).push(MaterialPageRoute(builder: (context) => NewProject())).then((value) => {User.refreshUserData().then((va) => {})});
          },
          label: Text("New Project"),
          icon: Icon(Icons.add)),
      appBar: AppBar(
          title: Column(
            mainAxisSize: MainAxisSize.max,
            mainAxisAlignment: MainAxisAlignment.end,
            children: [
              Row(
                mainAxisSize: MainAxisSize.max,
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: [
                  Row(children: [Icon(Icons.work_outline_sharp, color: Theme.of(context).primaryColor), SizedBox(width: 10), Text('Projects')]),
                  Row(
                    children: [
                      (User.offline)
                          ? Icon(Icons.signal_cellular_connected_no_internet_4_bar_outlined)
                          : InkWell(
                        onTap: () async{
                          await User.refreshUserData();
                          setState(() {
                            //LoadStats();

                          });
                        },
                        child: Icon(Icons.refresh, size: 30),
                      )
                    ],
                  )
                ],
              ),
              //Container(color: Colors.red,child: Text("Offline",style:TextStyle(fontSize: 5))),
            ],
          )),
      drawer: navDrawer(context, 7),
      body: Container(
        padding: EdgeInsets.all(10),
        child: Column(
          children: printProjects(),
        ),
      ),
    ));
  }

  List<Widget> printProjects(){
    List<Widget> projectWidgets = [];

    for (var element in User.projects) {
      if(element.cat==null){print(element.name + " has no cat");continue;}
      projectWidgets.add(ProjectCard(element));
    }

    return projectWidgets;
  }

  Widget ProjectCard(Project project){
    Duration timeLeft = project.deadline.difference(DateTime.now());
    return Row(
      mainAxisSize: MainAxisSize.max,
        mainAxisAlignment: MainAxisAlignment.center,
        children:[
          Expanded(
              child: Card(
                  child:InkWell(
                    onLongPress: (){
                      Dialogs.showProjectDetails(project);
                    },
                    child: Padding(
                      padding: const EdgeInsets.all(10.0),
                      child: Column(
                        children: [
                          Row(
                            mainAxisSize: MainAxisSize.max,
                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
                            children: [
                              Text(project.name ,style: TextStyle(fontSize: 18)),
                              Container(
                                decoration: BoxDecoration(
                                  color: (project.cat!.productive) ?Colors.green : Colors.red,
                                  borderRadius: BorderRadius.circular(8)
                                ),
                                  child:Padding(
                                padding: const EdgeInsets.symmetric(horizontal: 5, vertical: 2),
                                child: Text(project.cat!.name),
                              ))
                            ],
                          ),
                          Divider(),
                          Row(
                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
                            children: [
                              Text("${project.steps.length} steps"),
                              Container(
                                  decoration: BoxDecoration(
                                      color: Colors.redAccent,
                                      borderRadius: BorderRadius.circular(8)
                                  ),
                                  child:Padding(
                                    padding: const EdgeInsets.symmetric(horizontal: 5, vertical: 2),
                                    // padding: const EdgeInsets.symmetric(horizontal: 5, vertical: 2),
                                    child: Text(durationToDays(timeLeft)),
                                    // child: Text("Deadline : " +DateFormat("yyyy-MM-dd").format(project.deadline)),
                                  ))
                            ],
                          )
                        ],
                      ),
                    ),
                  )
              )
          )
        ]
    );
  }
}

String durationToDays(Duration duration){
  String output ="";
  if(duration.inDays > 30){
    output += (duration.inDays/30).floor().toString() + " months";
    output += (duration.inDays%30==0) ? "" : " and " + (duration.inDays %30).toString() + " days";
  }else{
    output += (duration.inDays %30).toString() + " days";
  }
  
  output += " left";

  return output;
}