import 'package:flutter/material.dart';

import 'package:dio/dio.dart';
import 'package:flustars/flustars.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:get/get.dart' hide Response;
import 'package:shimmer/shimmer.dart';
import 'package:velocity_x/velocity_x.dart';

import 'package:aku_community/base/base_style.dart';
import 'package:aku_community/constants/api.dart';
import 'package:aku_community/constants/app_theme.dart';
import 'package:aku_community/model/manager/advice_detail_model.dart';
import 'package:aku_community/model/manager/suggestion_or_complain_model.dart';
import 'package:aku_community/ui/manager/advice/advice_add_comment_page.dart';
import 'package:aku_community/ui/manager/advice/advice_evaluate_page.dart';
import 'package:aku_community/utils/headers.dart';
import 'package:aku_community/utils/network/net_util.dart';
import 'package:aku_community/widget/bee_scaffold.dart';
import 'package:aku_community/widget/buttons/bottom_button.dart';
import 'package:aku_community/widget/views/bee_grid_image_view.dart';

class AdviceDetailPage extends StatefulWidget {
  final SuggestionOrComplainModel? model;
  AdviceDetailPage({Key? key, required this.model}) : super(key: key);

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

class _AdviceDetailPageState extends State<AdviceDetailPage> {
  bool _loading = true;
  EasyRefreshController _refreshController = EasyRefreshController();
  late AdviceDetailModel _model;
  String get adviceValue {
    switch (widget.model!.type) {
      case 1:
        return '咨询';
      case 2:
        return '建议';
      case 3:
        return '投诉';
      case 4:
        return '表扬';
    }
    return '';
  }

  _buildShimmer() {
    return Padding(
      padding: EdgeInsets.all(32.w),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Shimmer.fromColors(
            baseColor: Colors.black12,
            highlightColor: Colors.white10,
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                VxBox().height(53.w).width(152.w).color(Colors.white).make(),
                30.hb,
                VxBox().height(40.w).width(600.w).color(Colors.white).make(),
                24.hb,
                VxBox().height(33.w).width(263.w).color(Colors.white).make(),
                50.hb,
                VxBox().height(53.w).width(152.w).color(Colors.white).make(),
                30.hb,
                VxBox().height(40.w).width(600.w).color(Colors.white).make(),
                24.hb,
                VxBox().height(33.w).width(263.w).color(Colors.white).make(),
              ],
            ),
          ),
          Divider(
            height: 50.w,
            thickness: 1.w,
            color: Color(0xFFD8D8D8),
          ),
          BeeGridImageView(
            urls: widget.model!.imgUrls!.map((e) => e.url).toList(),
            padding: EdgeInsets.only(right: 100.w),
          ),
        ],
      ),
    );
  }

  _buildAdviceContent(AppAdviceContentVos item) {
    String type = '';
    switch (item.createUserType) {
      case 1:
        type = '您';
        break;
      case 2:
        type = '装修公司';
        break;
      case 3:
        type = '物业';
        break;
    }
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        '$type\的回复'.text.size(38.sp).bold.make(),
        28.hb,
        item.content!.text.size(28.sp).color(ktextSubColor).make(),
        24.hb,
        DateUtil.formatDate(item.date, format: 'yyyy年MM月dd日 HH:mm')
            .text
            .size(24.sp)
            .color(Color(0xFF999999))
            .make(),
        50.hb,
      ],
    );
  }

  _buildChild() {
    return ListView(
      padding: EdgeInsets.all(32.w),
      children: [
        '您的$adviceValue'.text.black.bold.size(38.sp).make(),
        30.hb,
        _model.appAdviceDetailVo!.appAdviceVo!.content!.text
            .color(ktextSubColor)
            .size(28.sp)
            .make(),
        24.hb,
        DateUtil.formatDate(
          _model.appAdviceDetailVo!.appAdviceVo!.date,
          format: 'yyyy年MM月dd日 HH:mm',
        ).text.size(24.sp).color(Color(0xFF999999)).make(),
        Divider(
          height: 50.w,
          thickness: 1.w,
          color: Color(0xFFD8D8D8),
        ),
        BeeGridImageView(
          urls: widget.model!.imgUrls!.map((e) => e.url).toList(),
          padding: EdgeInsets.only(right: 100.w),
        ),
        Divider(
          height: 50.w,
          thickness: 1.w,
          color: Color(0xFFD8D8D8),
        ),
        ..._model.appAdviceDetailVo!.appAdviceContentVos!
            .map((e) => _buildAdviceContent(e))
            .toList(),
      ],
    );
  }

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

  @override
  Widget build(BuildContext context) {
    return BeeScaffold(
      title: '查看详情',
      systemStyle: SystemStyle.yellowBottomBar,
      actions: [
        TextButton(
          onPressed: () =>
              Get.to(() => AdviceEvaluatePage(id: widget.model!.id)),
          child: '评价'.text.make(),
        ),
      ],
      body: EasyRefresh(
        firstRefresh: true,
        child: _loading ? _buildShimmer() : _buildChild(),
        controller: _refreshController,
        header: MaterialHeader(),
        onRefresh: () async {
          Response res = await NetUtil().dio!.get(
            API.manager.adviceDetail,
            queryParameters: {'adviceId': widget.model!.id},
          );
          _model = AdviceDetailModel.fromJson(res.data);
          _loading = false;
          if (mounted) setState(() {});
        },
      ),
      bottomNavi: BottomButton(
        onPressed: () async {
          bool result =
              await (Get.to(() => AdviceAddCommentPage(id: widget.model!.id)));
          if (result && mounted) _refreshController.callRefresh();
        },
        child: '继续提问'.text.bold.make(),
      ),
    );
  }
}