import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_background_service/flutter_background_service.dart';
import 'package:project_telephony/utils/user_tool.dart';
import 'package:shared_preferences/shared_preferences.dart';

import '../constants/api.dart';
import '../model/login_info_model.dart';
import '../model/network/api_client.dart';
import '../model/user_info_model.dart';
import '../utils/hive_store.dart';
import '../utils/toast/cloud_toast.dart';

class UserProvider extends ChangeNotifier {
  bool _isLogin = false;
  bool _kg = false;

  bool get kg => _kg;

  bool get isLogin => _isLogin;
  late UserInfoModel _userInfo;

  UserInfoModel get userInfo => _userInfo;
  late String _contentCon;

  String get contentCon => _contentCon;
  late String _contentRef;

  String get contentRef => _contentRef;

  Future<bool> init() async {
    if (HiveStore.appBox?.containsKey('token') ?? false) {
      final token = HiveStore.appBox?.get('token') as String;
      _isLogin = true;
      apiClient.setToken(token);
      await updateUserInfo();
      return true;
    } else {
      _isLogin = false;
      return false;
    }
  }

  Future setKg(bool lockage) async {
    _kg = lockage;
    notifyListeners();
  }

  Future setToken(String token, {User? user}) async {
    apiClient.setToken(token);
    await HiveStore.appBox!.put('token', token);
    _isLogin = true;
    //每次打开app更新用户信息
    await updateUserInfo();
     updateConSms();
     updateRefSms();
  }

  Future logout() async {
    apiClient.clearToken();
    _isLogin = false;
    await HiveStore.appBox?.delete('token');
  }

  Future updateUserInfo() async {
    var base = await apiClient.request(API.app.info);
    if (base.code == 0) {
      _userInfo = UserInfoModel.fromJson(base.data);
    } else {
      CloudToast.show(base.msg);
      _userInfo = UserInfoModel.fail;
    }
    notifyListeners();
  }

  Future updateConSms() async {
    final prefs = await SharedPreferences.getInstance();
    final service = FlutterBackgroundService();
    var base = await apiClient.request(API.app.find, data: {'status': 1});
    if (base.code == 0) {
      await prefs.remove('conSms');
      await prefs.setString('conSms', "[${UserTool.userProvider.userInfo.tag}]${base
          .data['content']}");
      service.invoke("stopService");
      if(prefs.getBool('kg')!){
        Future.delayed(const Duration(seconds: 1), () async {
          service.startService();
        });
      }
    } else {
      CloudToast.show(base.msg);
    }

    notifyListeners();
  }

  Future updateRefSms() async {
    final prefs = await SharedPreferences.getInstance();
    final service = FlutterBackgroundService();
    var base = await apiClient.request(API.app.find, data: {'status': 2});
    if (base.code == 0) {
      await prefs.remove('refSms');
      await prefs.setString('refSms', "[${UserTool.userProvider.userInfo.tag}]${base
          .data['content']}" );
      service.invoke("stopService");
      if(prefs.getBool('kg')!){
        Future.delayed(const Duration(seconds: 1), () async {
          service.startService();
        });
      }
    } else {
      CloudToast.show(base.msg);
    }
    notifyListeners();
  }
}
