import 'dart:convert' as convert;
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:zhiying_base_widget/pages/main_page/notifier/main_page_notifier.dart';
import 'package:zhiying_base_widget/widgets/custom/goods/category_goods/category_goods_callback.dart';
import 'package:zhiying_base_widget/widgets/home/home_goods/bloc/home_goods_bloc.dart';
import 'package:zhiying_base_widget/widgets/home/home_goods/home_goods_item.dart';
import 'package:zhiying_base_widget/widgets/home/home_goods/home_goods_item_single.dart';
import 'package:zhiying_base_widget/widgets/home/home_goods/models/home_goods_model.dart';
import 'package:zhiying_base_widget/widgets/home/home_goods/models/home_goods_style_model.dart';
import 'package:zhiying_comm/util/base_bloc.dart';
import 'package:zhiying_comm/zhiying_comm.dart';

class CustomGoods2 extends StatefulWidget {
  final Map<String, dynamic> data;
  final GlobalKey<CustomGoodsContainer2State> globalKey;
  CustomGoods2(
    this.data, {
      this.globalKey,
    Key key,
  }) : super(key: key);

  @override
  _CustomGoods2State createState() => _CustomGoods2State();
}

class _CustomGoods2State extends State<CustomGoods2> {
  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return BlocProvider<HomeGoodsBloc>(
      bloc: HomeGoodsBloc(),
      child: CustomGoodsContainer2(widget.data, key: widget.globalKey,),
    );
  }

  @override
  void dispose() {
    super.dispose();
  }
}

class CustomGoodsContainer2 extends StatefulWidget {
  final Map<String, dynamic> data;

  CustomGoodsContainer2(this.data, {Key key}) : super(key: key);

  @override
  CustomGoodsContainer2State createState() => CustomGoodsContainer2State();
}

class CustomGoodsContainer2State extends State<CustomGoodsContainer2> {
  HomeGoodsBloc _bloc;
  String _provider = '';
  HomeGoodsStyleModel _style;

  @override
  void initState() {
    _bloc = BlocProvider.of<HomeGoodsBloc>(context);
    String d = widget.data['data'];
    dynamic json = convert.jsonDecode(d);
    _style = HomeGoodsStyleModel.fromJson(Map<String, dynamic>.from(json));
    super.initState();
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    print('didChangeDependencies');
    bool isNeedLoadMore = Provider.of<MainPageNotifier>(context).scrollEnd;
    if (isNeedLoadMore && _provider != '') {
      changeProviderOrLoadMore(_provider);
    }
  }

  @override
  Widget build(BuildContext context) {
    return StreamBuilder<List<HomeGoodsModel>>(
      stream: _bloc.outData,
      builder: (BuildContext context, AsyncSnapshot snapshot) {
        // if (snapshot.data == null) {
        //   return SliverToBoxAdapter(
        //     child: HomeGoodsSkeleton(),
        //   );
        // }
        // Loading.dismiss();
        List<HomeGoodsModel> goods = snapshot.data;
        int column = int.tryParse(_style.listColumn ?? '1');
        column = column <= 0 ? 1 : column;
        int count = ((goods?.length ?? 0) / column).ceil();
        return SliverList(
          delegate: SliverChildBuilderDelegate((context, index) {
            if (column == 1) {
              return HomeGoodsItemSingle(
                goods[index],
                _style,
                data: widget.data,
              );
            } else {
              // return Container(color: Colors.red, height: 126,margin: EdgeInsets.all(10),);
              return Padding(
                padding: const EdgeInsets.only(left: 5, right: 5),
                child: Row(
                  children: List.generate(column, (c) {
                    int i = index * column + c;
                    return Expanded(
                      child: i < goods.length
                          ? HomeGoodsItem(
                              goods[i],
                              _style,
                              data: widget.data,
                            )
                          : Container(),
                    );
                  }).toList(),
                ),
              );
            }
          }, childCount: count),
        );
      },
    );
  }

  // Global Key
  void changeProviderOrLoadMore(String provider) {
    Logger.warn('_CustomGoodsContainer2State ======================= provider = $provider');
    _provider = provider;
    _bloc?.loadMore(_bloc.providerss);
  }
}
