import 'package:bot_toast/bot_toast.dart';

import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:project_telephony/extensions/num_ext.dart';
import 'package:project_telephony/utils/headers.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';

import '../../base/base_style.dart';
import '../../constants/api.dart';
import '../../model/network/api_client.dart';
import '../../model/network/base_model.dart';
import '../../model/sms_content_model.dart';
import '../../providers/user_provider.dart';
import '../../utils/toast/cloud_toast.dart';
import '../widget/centertipsalterwidget.dart';
import 'add_sms_page.dart';
import 'home_page.dart';

class CallingIdleList extends StatefulWidget {
  final EasyRefreshController refreshController;
  final String title;
  final int status;
  final String? name;
  final Color themeColor;

  const CallingIdleList({
    Key? key,
    required this.title,
    required this.status,
    this.name = '',
    required this.themeColor,
    required this.refreshController,
  }) : super(key: key);

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

class _CallingIdleListState extends State<CallingIdleList>
    with AutomaticKeepAliveClientMixin {
  final userProvider = Provider.of<UserProvider>(Get.context!, listen: false);
  final Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
  List<String> textList = ['现在无法接听。有什么事吗？', '自定义短信内容'];
  List<SmsContentModel> _model = [];
  List<String> textListSMS = [];
  List<int> smsIdList = [];
  int isCheck = 0;
  late bool val = false;

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

  Future<void> getSwitch() async {
    final SharedPreferences prefs = await _prefs;
    val = prefs.getBool(widget.name!)!;

    print(val);
  }

  Future<void> updateList() async {
    if (userProvider.isLogin) {
      textListSMS.clear();
      smsIdList.clear();
      int i = 0;
      var base = await apiClient
          .request(API.content.findByStatus, data: {'status': widget.status});
      if (base.code == 0) {
        _model = (base.data as List)
            .map((e) => SmsContentModel.fromJson(e))
            .toList();
      } else {
        CloudToast.show(base.msg);
      }
      for (var model in _model) {
        textListSMS.add(model.content);
        smsIdList.add(model.id);
        if (model.isChecked == 1) {
          isCheck = i;
        }
        i++;
      }
      textListSMS.add("自定义短信内容");
    } else {
      textListSMS = textList;
    }
  }

  @override
  Widget build(BuildContext context) {
    return EasyRefresh(
      firstRefresh: true,
      controller: widget.refreshController,
      header: MaterialHeader(),
      // footer: MaterialFooter(),
      onRefresh: () async {
        // await userProvider.updateUserInfo();
        getSwitch();
        await updateList();
        setState(() {});
      },
      child: ListView(
        children: [
          _getText(),
          32.hb,
          // _getEmptyList(),
          widget.name!.isEmpty || val
              ?
          SizedBox(
               height: 1000.w,
                  child: ListView.builder(
                  itemBuilder: (context, index) {
                    return _getBox(textListSMS[index], index);
                  },
                  itemCount: textListSMS.length,
                ))
              : _getEmptyList(),
          // SliverList(
          //   delegate: SliverChildBuilderDelegate((context, index) {
          //     return _getBox(textListSMS[index], index);
          //   }, childCount: textListSMS.length),
          // ),
        ],
      ),
    );
    // Column(
    //   children: [
    //     _getText(),
    //     32.hb,
    //     widget.name!.isEmpty || val
    //         ? Expanded(
    //             child: EasyRefresh.custom(
    //               firstRefresh: true,
    //               controller: widget.refreshController,
    //               header: MaterialHeader(),
    //               // footer: MaterialFooter(),
    //               onRefresh: () async {
    //                 // await userProvider.updateUserInfo();
    //                 await updateList();
    //                 setState(() {});
    //               },
    //               slivers: [
    //                 SliverList(
    //                   delegate: SliverChildBuilderDelegate((context, index) {
    //                     return _getBox(textListSMS[index], index);
    //                   }, childCount: textListSMS.length),
    //                 ),
    //               ],
    //             ),
    //           )
    //         : _getEmptyList(),
    //   ],
    // );
  }
  _getText() {
    return Container(
      height: 128.w,
      // width: 622.w,
      padding: EdgeInsets.only(left: 40.w, top: 45.w),
      child: ListTile(
        title: Text(
          "功能讲解",
          style: TextStyle(fontWeight: FontWeight.bold, fontSize: 36.sp),
        ),
        subtitle: Text(
          widget.title,
          style: TextStyle(color: const Color(0xFF999999), fontSize: 27.sp),
        ),
        trailing: Offstage(
          offstage: widget.name!.isEmpty,
          child: Switch(
            value: val,
            onChanged: (value) async {
              final SharedPreferences prefs = await _prefs;
              setState(() {
                val = value;
                prefs.remove(widget.name!);
                prefs.setBool(widget.name!, val);
              });
              service.invoke("stopService");
              if (prefs.getBool('kg')!) {
                Future.delayed(const Duration(seconds: 1), () async {
                  service.startService();
                });
              }
            },
          ),
        ),
      ),
    );
  }

  _getBox(String content, int index) {
    return GestureDetector(
      onTap: () async {
        if (content != "自定义短信内容") {
          BaseModel res = await apiClient.request(API.content.checked,
              data: {'id': smsIdList[index], 'status': widget.status});
          if (res.code == 0) {
            setState(() {});
            // await userProvider.updateUserInfo();
            switch (widget.status) {
              case 1:
                await userProvider.updateConSms();
                break;
              case 2:
                await userProvider.updateRefSms();
                break;
              case 3:
                await userProvider.updateCallSms();
                break;
              case 4:
                await userProvider.updateIdleSms();
                break;
            }
            widget.refreshController.callRefresh();
          } else {
            CloudToast.show(res.msg);
          }
        } else {
          if (userProvider.userInfo.isVip == 1) {
            if (textListSMS.length > 5) {
              BotToast.showText(text: '自定义数量已达上限，请先删除不需要的短信');
            } else {
              Get.to(
                AddSmsPage(
                  status: widget.status,
                  ploneBack: (String textContent) {
                    widget.refreshController.callRefresh();
                  },
                ),
              );
            }
          } else {
            BotToast.showText(text: '请先开通会员');
          }
        }
        setState(() {});
      },
      onLongPress: () {
        if (content != "自定义短信内容") {
          if (textListSMS.length == 2 || isCheck == index) {
            if (textListSMS.length == 2) {
              BotToast.showText(text: '最后一条内容不可删除');
            } else if (isCheck == index) {
              BotToast.showText(text: '当前为选中内容,不可删除');
            }
          } else {
            showDialog(
                context: context,
                builder: (context) {
                  return Centertipsalterwidget(
                    desText: '你确定要删除这个短信模版吗,删除之后无法还原。',
                    title: '删除短信模板',
                    id: smsIdList[index],
                    callback: (bool status) {
                      widget.refreshController.callRefresh();
                    },
                  );
                });
          }
        }
        setState(() {});
      },
      child: Container(
        // width: 686.w,
        height: 128.w,
        margin: EdgeInsets.only(top: 32.w, left: 64.w, right: 64.w),
        padding: EdgeInsets.only(left: 40.w, top: 45.w),
        decoration: BoxDecoration(
          borderRadius: BorderRadius.circular(16),
          gradient: LinearGradient(
              begin: Alignment.centerLeft,
              end: Alignment.centerRight,
              colors: [
                index == isCheck ? widget.themeColor : const Color(0xFFF9F9F9),
                index == isCheck
                    ? widget.themeColor.withOpacity(0.5)
                    : const Color(0xFFF9F9F9),
              ]),
        ),
        child: Text(
          content,
          style: TextStyle(
              fontSize: BaseStyle.fontSize28,
              color: index == isCheck
                  ? const Color(0xFFF9F9F9)
                  : BaseStyle.color333333,
              fontWeight: FontWeight.bold),
        ),
      ),
    );
  }

  _getEmptyList() {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.center,
      children: [
        234.hb,
        Image.asset(
          Assets.images.emptylist.path,
          width: 240.w,
          height: 212.w,
          fit: BoxFit.fill,
        ),
        48.hb,
        Text(
          "功能已关闭",
          style: TextStyle(
              color: const Color(0xFF999999),
              fontWeight: FontWeight.bold,
              fontSize: 36.sp),
        ),
        16.hb,
        Text(
          "去电拒接/未接后将不会发送短信",
          style: TextStyle(color: const Color(0xFF999999), fontSize: 28.sp),
        ),
      ],
    );
  }

  @override
  bool get wantKeepAlive => true;
}
