import 'package:datetime_picker_formfield/datetime_picker_formfield.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart' as intl;
import 'package:go_router/go_router.dart';
import 'package:oc_front/core/services/specialized_services/workflow_execution_service.dart';
import 'package:oc_front/main.dart';
import 'package:oc_front/pages/abstract_page.dart';
import 'package:oc_front/widgets/sheduler_items/schedule.dart';

class  SchedulerFactory implements AbstractFactory {
  @override GlobalKey getKey() { return key; }
  static GlobalKey<SchedulerPageWidgetState> key = GlobalKey<SchedulerPageWidgetState>();
  @override bool searchFill() { return false; }
  @override Widget factory(GoRouterState state, List<String> args) { return SchedulerPageWidget(); }
  @override void search(BuildContext context, bool special) { }
}

class SchedulerPageWidget extends StatefulWidget {
  bool isList = true;
  DateTime start = DateTime.now();
  DateTime end = DateTime.now().add(const Duration(days: 180));
  final WorkflowExecutionService _service = WorkflowExecutionService();
  SchedulerPageWidget(): super(key: SchedulerFactory.key);
  @override SchedulerPageWidgetState createState() => SchedulerPageWidgetState();
  static void search(BuildContext context) { }
  static Widget factory() { return SchedulerPageWidget(); }
}
class SchedulerPageWidgetState extends State<SchedulerPageWidget> {  
  @override Widget build(BuildContext context) {
        GlobalKey<ScheduleWidgetState> k = GlobalKey<ScheduleWidgetState>();
        return Column( children: [
          Container( color: lightColor,
            height: 50, width: getMainWidth(context),
            child: Padding(padding: const EdgeInsets.symmetric(horizontal: 50),
              child: Row( children: [
                Padding(padding: const EdgeInsets.only(right: 30),
                  child: Tooltip( message: widget.isList ? "calendar view" : "list view",
                    child: InkWell( child: Icon( widget.isList ? Icons.calendar_month : Icons.list, color: Colors.white 
                      , size: 25 ),
                      onTap: () { 
                        widget.isList = !widget.isList;
                        k.currentState?.setState(() { k.currentState?.widget.isList = widget.isList; });
                      })
                  ),
                ), 
                Container(padding: const EdgeInsets.only(left: 20),
                  width: getMainWidth(context) / 5,
                  height: 30,
                  child: DateTimeField( 
                                validator: (value) {
                                  return null;
                                },
                                resetIcon: null,
                                onShowPicker: (context, currentValue) async { 
                                  var date = await showDatePicker(                                    
                                    builder: (BuildContext context, Widget? child) {
                                      Widget w = Theme(
                                        data: ThemeData(
                                          cardTheme: CardTheme(elevation: 0, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(0))),
                                          dialogTheme: DialogTheme(elevation: 0, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(0))),
                                          colorScheme: ColorScheme.light(
                                            background: midColor,
                                            tertiary: Colors.grey,
                                            secondary: Colors.grey,
                                            primary: Colors.black),
                                        ),
                                        child: child ?? Container(),
                                      );
                                      return w;
                                    },
                                    context: context,
                                    firstDate: DateTime(1900),
                                    initialDate: widget.start,
                                    lastDate: DateTime(2100)
                                  );
                                  return date;
                                },
                                
                                format: intl.DateFormat('y-M-dd hh:mm:ss'),
                                initialValue: widget.start,
                                onChanged: (value) { 
                                  if (value == null) { return; }
                                  setState(() { widget.start = value; });
                                },
                                style: const TextStyle(fontSize: 12),
                                decoration: const  InputDecoration(
                                  fillColor: Colors.white,
                                  floatingLabelBehavior: FloatingLabelBehavior.always,
                                  filled: true,
                                  alignLabelWithHint: false,
                                  hintText: "enter start date...",
                                  labelText: "",
                                  errorStyle: TextStyle(fontSize: 0),
                                  hintStyle: TextStyle(fontSize: 10),
                                  labelStyle: TextStyle(fontSize: 15, color: Colors.black, fontWeight: FontWeight.w500),
                                  enabledBorder: OutlineInputBorder(borderSide: BorderSide(color: Colors.transparent)),
                                  border: OutlineInputBorder(borderSide: BorderSide(color: Colors.transparent)),
                                  contentPadding: EdgeInsets.symmetric(horizontal: 10, vertical: 5),
                                ),
                          )
                ),
                Container(padding: const EdgeInsets.only(left: 20), 
                  child: const Text("TO", style: TextStyle(color: Colors.white, fontSize: 15, fontWeight: FontWeight.w500))),
                Container( padding: const EdgeInsets.only(left: 20, right: 20),
                  width: getMainWidth(context) / 5,
                  height: 30,
                  child: DateTimeField( 
                                validator: (value) {
                                  return null;
                                },
                                resetIcon: null,
                                onShowPicker: (context, currentValue) async { 
                                  var date = await showDatePicker(                                    
                                    builder: (BuildContext context, Widget? child) {
                                      Widget w = Theme(
                                        data: ThemeData(
                                          cardTheme: CardTheme(elevation: 0, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(0))),
                                          dialogTheme: DialogTheme(elevation: 0, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(0))),
                                          colorScheme: ColorScheme.light(
                                            background: midColor,
                                            tertiary: Colors.grey,
                                            secondary: Colors.grey,
                                            primary: Colors.black),
                                        ),
                                        child: child ?? Container(),
                                      );
                                      return w;
                                    },
                                    context: context,
                                    firstDate: DateTime(1900),
                                    initialDate: widget.end,
                                    lastDate: DateTime(2100)
                                  );
                                  return date;
                                },
                                format: intl.DateFormat('y-M-dd hh:mm:ss'),
                                initialValue: widget.end,
                                onChanged: (value) { 
                                  if (value == null) { return; }
                                  setState(() { widget.start = value; });
                                },
                                style: const TextStyle(fontSize: 12),
                                decoration: const  InputDecoration(
                                  fillColor: Colors.white,
                                  floatingLabelBehavior: FloatingLabelBehavior.always,
                                  filled: true,
                                  alignLabelWithHint: false,
                                  hintText: "enter end date...",
                                  labelText: "",
                                  errorStyle: TextStyle(fontSize: 0),
                                  hintStyle: TextStyle(fontSize: 10),
                                  labelStyle: TextStyle(fontSize: 15, color: Colors.black, fontWeight: FontWeight.w500),
                                  enabledBorder: OutlineInputBorder(borderSide: BorderSide(color: Colors.transparent)),
                                  border: OutlineInputBorder(borderSide: BorderSide(color: Colors.transparent)),
                                  contentPadding: EdgeInsets.symmetric(horizontal: 10, vertical: 5),
                                ),
                          )
                ),
                Tooltip( message: "refresh scheduler",
                  child: InkWell(
                    onTap: () => setState(() {}),
                    child: const Icon(Icons.refresh, color: Colors.white,),
                  ),
                )
              ]))
          ),
          ScheduleWidget( service: widget._service, key: k, start: widget.start, end : widget.end, isList: widget.isList, )
        ]);
  }
}