import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:localstorage/localstorage.dart';
import 'package:oc_front/core/models/workspace_local.dart';
import 'package:oc_front/core/sections/header/header.dart';
import 'package:oc_front/core/services/router.dart';
import 'package:oc_front/main.dart';
import 'package:oc_front/models/resources/resources.dart';
import 'package:oc_front/pages/abstract_page.dart';
import 'package:oc_front/pages/catalog.dart';
import 'package:oc_front/widgets/items/item.dart';
import 'package:oc_front/widgets/items/item_row.dart';

class CatalogItemFactory implements AbstractFactory {
  static GlobalKey<CatalogItemPageWidgetState> key = GlobalKey<CatalogItemPageWidgetState>();
  @override GlobalKey getKey() { return key; }
  @override void back(BuildContext context) { 
    search(context, false);
  }
  @override String? getSearch() { 
    if ((localStorage.getItem("search") ?? "") == "") { return null; }
    return localStorage.getItem("search")!.split(",")[0]; 
  }
  @override bool searchFill() { return false; }
  @override Widget factory(GoRouterState state, List<String> args) { 
    var id = state.pathParameters[args.first];
    try {
      var item = CatalogFactory.key.currentState?.widget.items.firstWhere( (element) => element.id == id );
      return CatalogItemPageWidget(item : item!); 
    } catch (e) { 
      var item =  WorkspaceLocal.getItem(id ?? "", false);
      if (item != null) { return CatalogItemPageWidget(item : item); }
      return Container(); 
    }
  }
  @override void search(BuildContext context, bool special) {
    if (special) { return; } // T
      var s = SearchConstants.get();
      AppRouter.catalog.go(context, {});
      Future.delayed(Duration(milliseconds: 10), () {
        SearchConstants.set(s);
        CatalogFactory().search(context, false);
      });
  }
}

// ignore: must_be_immutable
class CatalogItemPageWidget extends StatefulWidget {
  AbstractItem item;
  CatalogItemPageWidget ({ required this.item }) : super(key: CatalogItemFactory.key);
  @override CatalogItemPageWidgetState createState() => CatalogItemPageWidgetState();
}
class CatalogItemPageWidgetState extends State<CatalogItemPageWidget> {
  @override Widget build(BuildContext context) {
    return Column( children: [
      ItemRowWidget(contextWidth: getMainWidth(context), item: widget.item, readOnly: true,),
      ItemWidget(item: widget.item),
    ]);
  }
}