import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:huixiang/community/community_view/community_dynamic.dart';
import 'package:huixiang/generated/l10n.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:huixiang/retrofit/data/article.dart';
import 'package:huixiang/retrofit/data/base_data.dart';
import 'package:huixiang/retrofit/data/comunity_comment.dart';
import 'package:huixiang/retrofit/data/member_comment_list.dart';
import 'package:huixiang/retrofit/data/page.dart';
import 'package:huixiang/retrofit/retrofit_api.dart';
import 'package:huixiang/view_widget/my_appbar.dart';
import 'package:huixiang/view_widget/tips_dialog.dart';
import 'package:huixiang/web/web_view/comment_list.dart';
import 'package:huixiang/web/web_view/input_comment.dart';
import 'package:shared_preferences/shared_preferences.dart';

class CommunityDetails extends StatefulWidget {
  final Map<String, dynamic> arguments;

  CommunityDetails({this.arguments});

  @override
  State<StatefulWidget> createState() {
    return _CommunityDetails();
  }
}

class _CommunityDetails extends State<CommunityDetails> with WidgetsBindingObserver {
  double height = 0;
  double commentHeight = 60.h;
  ComunityComment comunity;
  String parenId = "0";
  final GlobalKey commentKey = GlobalKey();
  final ScrollController scrollController = ScrollController();

  List<MemberCommentList> memberList = [];
  ApiService apiService;
  var commentFocus = FocusNode();

  String hintText = S.current.liuxianinjingcaidepinglunba;
  bool isKeyBoardShow = false;
  int commentTotal = 0;
  Article article;

  @override
  void didChangeMetrics() {
    WidgetsBinding.instance.addPostFrameCallback((_) {
      if (!mounted) return;
      if (MediaQuery
          .of(context)
          .viewInsets
          .bottom == 0) {
        if (isKeyBoardShow) {
          FocusScope.of(context).requestFocus(FocusNode());
          if (mounted)
            setState(() {
              hintText = S.current.liuxianinjingcaidepinglunba;
              isKeyBoardShow = false;
            });
        }
      } else {
        if (mounted)
          setState(() {
            isKeyBoardShow = true;
          });
      }
    });
  }

  @override
  void initState() {
    super.initState();
    comunity = widget.arguments["comment"];
    WidgetsBinding.instance.addObserver(this);

    _queryMemberCommentList();
    queryDetails();
  }

  ///详情接口
  queryDetails() async {
    SharedPreferences value = await SharedPreferences.getInstance();
    if (apiService == null)
      apiService = ApiService(
        Dio(),
        context: context,
        token: value.getString("token"),
      );
    BaseData<Article> baseData = await apiService.informationInfo(comunity.id)
        .catchError((onError) {
      debugPrint(onError.toString());
    });
    if (baseData != null && baseData.isSuccess) {}
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: MyAppBar(
        title: "动态详情",
        titleColor: Colors.black,
        titleSize: 18.sp,
        background: Colors.white,
        leading: true,
        leadingColor: Colors.black,
      ),
      body: Container(
        child: Column(
          children: [
            Expanded(
              child: SingleChildScrollView(
                physics: BouncingScrollPhysics(),
                child: Column(
                  children: [
                    CommunityDynamic(
                      comunity,
                      0,
                      exitFull: () {
                        setState(() {});
                      },
                      userId:widget.arguments["userId"],
                      itemCount: 3,
                      isDetails: true,
                      heightFun: (height) {
                        this.height = height +
                            MediaQuery
                                .of(context)
                                .padding
                                .top +
                            kToolbarHeight +
                            24;
                        if (mounted) setState(() {});
                      },
                    ),
                    CommentList(
                      commentKey,
                      comunity?.likes ?? comunity?.likes.toString() ?? 0,
                      comunity.id,
                      isKeyBoardShow,
                      _reply,
                      _delCommentTips,
                      12.sp,
                    ),
                    if (memberList == null || memberList.length == 0)
                      Container(
                        width: double.infinity,
                        alignment: Alignment.topCenter,
                        margin: EdgeInsets.only(top: 40),
                        padding: EdgeInsets.all(22.h),
                        child: Text(
                          S
                              .of(context)
                              .zanwupinglun,
                          style: TextStyle(
                            fontSize: 12,
                            fontWeight: FontWeight.bold,
                            color: Color(0xFFA0A0A0),
                          ),
                        ),
                      ),
                  ],
                ),
              ),
              flex: 1,
            ),

            /// 富文本评论的输入框
            InputComment(
              inputKey,
              hintText,
              isKeyBoardShow,
              commentFocus,
              commentTextController,
              _toComment,
              _queryMemberComment,
              _queryInformationLikes,
              isLike: comunity.selfLike,
            ),
          ],
        ),
      ),
    );
  }

  ///给文章/活动点赞
  _queryInformationLikes() async {
    BaseData baseData = await apiService.informationLikes(comunity.id);
    if (baseData != null && baseData.isSuccess) {
      commentKey.currentState.setState(() {});
      setState(() {
        if (comunity.selfLike ?? false)
          comunity.likes -= 1;
        else
          comunity.likes += 1;
        comunity.selfLike = !comunity.selfLike ?? false;
      });
    } else {
      // SmartDialog.showToast(baseData.msg, alignment: Alignment.center);
    }
  }

  ///发布评论
  _queryMemberComment(String content) async {
    BaseData baseData = await apiService.memberComment({
      "content": content,
      "parentId": parenId,
      "relationalId": comunity.id,
      "relationalType": 1
    }).catchError((error) {});
    if (baseData != null && baseData.isSuccess) {
      CommentListState state = commentKey.currentState;
      state.queryMemberCommentList();
      commentTextController.text = "";
      FocusScope.of(context).unfocus();
      _queryMemberCommentList();
    }
  }

  ///滑动到评论列表
  _toComment() {
    if (commentKey.currentContext == null) return;
    RenderBox firstRenderBox = commentKey.currentContext.findRenderObject();
    Offset first = firstRenderBox.localToGlobal(Offset.zero);
    scrollController.animateTo(
      first.dy +
          scrollController.offset -
          (kToolbarHeight + MediaQuery
              .of(context)
              .padding
              .top),
      duration: Duration(milliseconds: 300),
      curve: Curves.easeIn,
    );
  }

  final GlobalKey inputKey = GlobalKey();
  final TextEditingController commentTextController = TextEditingController();

  contentHeight() {
    double contentHeight = MediaQuery
        .of(context)
        .size
        .height -
        kToolbarHeight -
        MediaQuery
            .of(context)
            .padding
            .top -
        160.h;
    if ((contentHeight - 60.h) > (128.h * memberList.length)) {
      commentHeight = contentHeight - (128.h * memberList.length);
    }
  }

  ///删除评论的提示
  _delCommentTips(memberComment) {
    SmartDialog.show(widget: Tips(() {
      delComment(memberComment);
    }));
  }

  ///删除评论
  delComment(memberComment) async {
    BaseData baseData = await apiService.delComment(memberComment.id);
    if (baseData != null && baseData.isSuccess) {
      CommentListState state = commentKey.currentState;
      state.queryMemberCommentList();
    }
  }

  ///评论 回复
  _reply(memberComment) {
    FocusScope.of(context).requestFocus(commentFocus);
    parenId = memberComment.id;
    hintText = S.of(context).huifu_("${memberComment.username}");
  }

  ///评论列表
  _queryMemberCommentList() async {
    SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
    if (apiService == null)
      apiService = ApiService(
        Dio(),
        context: context,
        token: sharedPreferences.getString("token"),
        showLoading: false,
      );
    BaseData<PageInfo<MemberCommentList>> baseData =
    await apiService.memberCommentList({
      "pageNum": 1,
      "pageSize": 100,
      "relationalId": comunity.id,
      "relationalType": 1,
    }).catchError((error) {});
    if (baseData != null && baseData.isSuccess) {
      commentTotal = baseData.data.size;
      memberList = baseData.data.list;
      contentHeight();
      if (mounted) setState(() {});
    }
  }
}