import 'package:event_bus/event_bus.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:zhiying_base_widget/widgets/home/home_goods/bloc/home_goods_header_bloc.dart';
import 'package:zhiying_base_widget/widgets/home/home_goods/home_goods_creater.dart';
import 'package:zhiying_base_widget/widgets/home/home_goods/models/home_goods_header_model.dart';
import 'package:zhiying_base_widget/widgets/home/home_goods/skeleton/home_goods_header_sk.dart';
import 'package:zhiying_comm/util/base_bloc.dart';
import 'package:zhiying_comm/zhiying_comm.dart';

class HomeGoodsHeaderDelegate extends SliverPersistentHeaderDelegate {
  final Widget child;

  HomeGoodsHeaderDelegate(this.child) : super();

  @override
  Widget build(
      BuildContext context, double shrinkOffset, bool overlapsContent) {
    print('${shrinkOffset.toString()}  ${overlapsContent.toString()}');
    return child;
  }

  @override
  double get maxExtent => 64.0;

  @override
  double get minExtent => 64.0;

  @override
  bool shouldRebuild(SliverPersistentHeaderDelegate oldDelegate) =>
      false; // 如果内容需要更新，设置为true
}

class HomeGoodsHeader extends StatelessWidget {
  final Map<String, dynamic> model;
  final EventBus eventBus;

  const HomeGoodsHeader(
    this.model,
    this.eventBus, {
    Key key,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return BlocProvider<HomeGoodsHeaderBloc>(
      bloc: HomeGoodsHeaderBloc(),
      child: _HomeGoodsHeader(model, eventBus),
    );
  }
}

class _HomeGoodsHeader extends StatefulWidget {
  final Map<String, dynamic> model;
  final EventBus eventBus;

  _HomeGoodsHeader(this.model, this.eventBus, {Key key}) : super(key: key);

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

class _HomeGoodsHeaderState extends State<_HomeGoodsHeader> {
  HomeGoodsHeaderBloc _bloc;

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

  @override
  void initState() {
    _bloc = BlocProvider.of<HomeGoodsHeaderBloc>(context);
    _bloc.loadData(widget.model['mod_id']);

    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return StreamBuilder<List<HomeGoodsHeaderModel>>(
        stream: _bloc.outData,
        builder: (BuildContext context, AsyncSnapshot snapshot) {
          if (snapshot.data == null) {
            return HomeGoodsHeaderSkeleton();
          }
          return HomeGoodsHeaderContainer(snapshot.data, widget.eventBus);
        });
  }
}

class HomeGoodsHeaderContainer extends StatefulWidget {
  final List<HomeGoodsHeaderModel> headers;
  final EventBus eventBus;

  HomeGoodsHeaderContainer(this.headers, this.eventBus, {Key key})
      : super(key: key);

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

class _HomeGoodsHeaderContainerState extends State<HomeGoodsHeaderContainer>
    with TickerProviderStateMixin {
  List<Widget> _widgets = List();

  TabController _tabController;
  int _currentIndex = 0;

  @override
  void initState() {
    _tabController = TabController(length: widget.headers.length, vsync: this);
    if (widget.headers.first != null) {
      widget.eventBus.fire(HomeGoodsHeaderEvent(widget.headers.first.modName));
    }

    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    _widgets.clear();
    for (int index = 0; index < widget.headers.length; index++) {
      _widgets.add(_HomeGoodsHeaderItem(
        widget.headers[index],
        isSelected: index == _currentIndex,
      ));
    }

    return Container(
      width: double.infinity,
      height: double.infinity,
      color: Color(0xfff9f9f9),
      child: TabBar(
        indicatorColor: Colors.transparent,
        controller: _tabController,
        isScrollable: true,
        tabs: _widgets,
        onTap: (index) {
          widget.eventBus
              .fire(HomeGoodsHeaderEvent(widget.headers[index].modName));
          setState(() {
            _currentIndex = index;
          });
        },
      ),
    );
  }
}

class _HomeGoodsHeaderItem extends StatelessWidget {
  final bool isSelected;
  final HomeGoodsHeaderModel model;

  const _HomeGoodsHeaderItem(this.model, {Key key, this.isSelected = false})
      : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
        // width: 60,
        // height: 54,
        child: Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Text(
            model.title,
            style: TextStyle(
                color: HexColor.fromHex(model.fontColor),
                fontSize: 17,
                fontWeight: FontWeight.bold),
          ),
          Container(
            margin: EdgeInsets.only(top: 4),
            padding: EdgeInsets.only(left: 6, right: 6, top: 2, bottom: 2),
            decoration: BoxDecoration(
                color: isSelected
                    ? HexColor.fromHex(model.fontColor)
                    : Colors.transparent,
                borderRadius: BorderRadius.circular(18)),
            child: Text(
              model.subtitle,
              style: TextStyle(
                  fontSize: 10,
                  color: isSelected ? Colors.white : Color(0xff999999)),
              textAlign: TextAlign.center,
            ),
          ),
        ],
      ),
    ));
  }
}
