import 'dart:async';

import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:gmalpha_flutter/FindModel/page/FindModel.dart';
import 'package:gmalpha_flutter/FindModel/service/remote/entity/FindEntity.dart';
import 'package:gmalpha_flutter/commonModel/base/BaseComponent.dart';
import 'package:gmalpha_flutter/commonModel/base/BasePage.dart';
import 'package:gmalpha_flutter/res/value/ALColors.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';

class FindPage extends StatefulWidget {
  FindModel _findModel;
  final String fromPage;

  FindPage(this.fromPage) {
    _findModel = new FindModel(1, 8);
  }

  @override
  _FindPageState createState() => _FindPageState(_findModel);
}

class _FindPageState extends BasePage<FindPage> {
  FindModel _findModel;
  static int count = 8;
  static int page = 1;

  RefreshController _refreshController =
      RefreshController(initialRefresh: false);

  _FindPageState(this._findModel);

  @override
  Widget build(BuildContext context) {
    ScreenUtil.instance = ScreenUtil(width: 375.0, height: 667.0)
      ..init(context);
    return Scaffold(
        appBar: AppBar(
          leading: GestureDetector(
            child: Center(
              child: Container(
                padding: EdgeInsets.fromLTRB(12, 0, 0, 0),
                child: Text("发现"),
              ),
            )),
          centerTitle: false,
          backgroundColor: ALColors.ColorFFFFFF,
          actions: <Widget>[
            Container(
              padding: EdgeInsets.only(right: 16),
              child: new Icon(Icons.search , size: 24.0,),
            ),
          ],
        ),
        body: SmartRefresher(
            enablePullDown: true,
            enablePullUp: true,
            header: WaterDropHeader(),
            footer: CustomFooter(
              builder: (BuildContext context, LoadStatus mode) {
                Widget body;
                if (mode == LoadStatus.idle) {
                  body = Text("上拉加载");
                } else if (mode == LoadStatus.loading) {
                  body = CupertinoActivityIndicator();
                } else if (mode == LoadStatus.failed) {
                  body = Text("加载失败!点击重试!");
                } else if (mode == LoadStatus.canLoading) {
                  body = Text("松手,加载更多!");
                } else {
                  body = Text("没有更多数据了!");
                }
                return Container(
                  height: 55.0,
                  child: Center(child: body),
                );
              },
            ),
            controller: _refreshController,
            onRefresh: _onRefresh,
            onLoading: _onLoading,
            child: CustomScrollView(
              slivers: <Widget>[
//                SliverToBoxAdapter(
//                  child: Container(height: 1,
//                  color: Colors.amberAccent,),
//                ),
                getListView(),
              ],
            )));
  }

  void _onRefresh() {
    _findModel.init(context, (value) {
      Timer(Duration(seconds: 1), () {
        _refreshController.refreshToIdle();
      });
    });
  }

  void _onLoading() async {
    page++;
    await _findModel.getFindPage(page, count, (data) {
      if (data.data?.cards?.length == 0) {
        _refreshController.loadNoData();
      } else {
        _refreshController.loadComplete();
      }
    });
  }

  Widget _listViewUI2(BuildContext context, Cards item) {
    return Container(
        width: ScreenUtil.instance.setWidth(375.0),
        margin: EdgeInsets.only(bottom: ScreenUtil.instance.setHeight(3)),
        child: Row(
            mainAxisAlignment: MainAxisAlignment.start,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              Container(
                  margin:
                      EdgeInsets.only(right: ScreenUtil.instance.setWidth(3.0)),
                  child: CachedNetworkImage(
                    imageUrl: '${item.topics[0].imageUrl}',
                    width: ScreenUtil.instance.setWidth(123),
                    height: ScreenUtil.instance.setHeight(123),
                    fit: BoxFit.cover,
                  )),
              Container(
                  margin:
                      EdgeInsets.only(right: ScreenUtil.instance.setWidth(3.0)),
                  child: CachedNetworkImage(
                    imageUrl: '${item.topics[1].imageUrl}',
                    width: ScreenUtil.instance.setWidth(123),
                    height: ScreenUtil.instance.setHeight(123),
                    fit: BoxFit.cover,
                  )),
              Container(
                  child: CachedNetworkImage(
                imageUrl: '${item.topics[2].imageUrl}',
                width: ScreenUtil.instance.setWidth(123),
                height: ScreenUtil.instance.setHeight(123),
                fit: BoxFit.cover,
              )),
            ]));
  }

  Widget _listViewUI1(BuildContext context, Cards item) {
    return Container(
        width: ScreenUtil.instance.setWidth(375.0),
        margin: EdgeInsets.only(bottom: ScreenUtil.instance.setHeight(3)),
        child: Row(
            mainAxisAlignment: MainAxisAlignment.start,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              Container(
                  margin:
                      EdgeInsets.only(right: ScreenUtil.instance.setWidth(3.0)),
                  child: CachedNetworkImage(
                    imageUrl: '${item.topics[0].imageUrl}',
                    width: ScreenUtil.instance.setWidth(249),
                    height: ScreenUtil.instance.setHeight(249),
                    fit: BoxFit.fitHeight,
                  )),
              Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: <Widget>[
                    Container(
                        margin: EdgeInsets.only(
                            bottom: ScreenUtil.instance.setHeight(3.0)),
                        child: CachedNetworkImage(
                          imageUrl: '${item.topics[1].imageUrl}',
                          width: ScreenUtil.instance.setWidth(123),
                          height: ScreenUtil.instance.setHeight(123),
                          fit: BoxFit.cover,
                        )),
                    Container(
                        child: CachedNetworkImage(
                      imageUrl: '${item.topics[2].imageUrl}',
                      width: ScreenUtil.instance.setWidth(123),
                      height: ScreenUtil.instance.setHeight(123),
                      fit: BoxFit.cover,
                    )),
                  ]),
            ]));
  }

  Widget _listViewUI3(BuildContext context, Cards item) {
    return Container(
        width: ScreenUtil.instance.setWidth(375.0),
        margin: EdgeInsets.only(bottom: ScreenUtil.instance.setHeight(3)),
        child: Row(
            mainAxisAlignment: MainAxisAlignment.start,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: <Widget>[
                    Container(
                        margin: EdgeInsets.only(
                            bottom: ScreenUtil.instance.setHeight(3)),
                        child: CachedNetworkImage(
                          imageUrl: '${item.topics[0].imageUrl}',
                          width: ScreenUtil.instance.setWidth(123),
                          height: ScreenUtil.instance.setHeight(123),
                          fit: BoxFit.cover,
                        )),
                    Container(
                        child: CachedNetworkImage(
                      imageUrl: '${item.topics[1].imageUrl}',
                      width: ScreenUtil.instance.setWidth(123),
                      height: ScreenUtil.instance.setHeight(123),
                      fit: BoxFit.cover,
                    )),
                  ]),
              Container(
                  margin:
                      EdgeInsets.only(left: ScreenUtil.instance.setWidth(3.0)),
                  child: CachedNetworkImage(
                    imageUrl: '${item.topics[2].imageUrl}',
                    width: ScreenUtil.instance.setWidth(249),
                    height: ScreenUtil.instance.setHeight(249),
                    fit: BoxFit.cover,
                  )),
            ]));
  }

  Widget loadingItem() {
    Widget loadCircle = Column(
      mainAxisAlignment: MainAxisAlignment.start,
      children: <Widget>[
        Container(
          padding: EdgeInsets.only(top: 60.0),
          child: CircularProgressIndicator(),
        ),
        Padding(
          padding: EdgeInsets.only(
              left: ScreenUtil.instance.setSp(10),
              right: ScreenUtil.instance.setSp(10),
              top: ScreenUtil.instance.setSp(10),
              bottom: ScreenUtil.instance.setSp(10)),
          child: Text('加载中...'),
        )
      ],
    );
    return SliverFillViewport(delegate: SliverChildListDelegate([loadCircle]));
  }

  Widget getListView() {
    return StreamBuilder<FindEntity>(
        stream: _findModel.findLive.stream,
        initialData: _findModel.findLive.data,
        builder: (BuildContext context, data) {
          var dataList = data?.data?.data;
          if (dataList == null) {
            return loadingItem();
          }
          return SliverList(
              delegate: SliverChildBuilderDelegate(
            (BuildContext context, int index) {
              var item = dataList.cards[index];
              if (item.layout == 1) {
                return _listViewUI1(context, item);
              } else if (item.layout == 2) {
                return _listViewUI2(context, item);
              } else {
                return _listViewUI3(context, item);
              }
            },
            childCount: dataList.cards.length,
          ));
        });
  }

  Widget noData() {
    return Container(
      height: double.maxFinite,
      width: double.maxFinite,
      color: Colors.amberAccent,
    );
  }

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

  @override
  String pageName() {
    return 'find_home';
  }

  @override
  String referrer() {
    return widget.fromPage;
  }

  @override
  void initState() {
    super.initState();
    _findModel.init(context);
  }
}