import 'dart:async';
import 'dart:ui';
import 'package:call_log/call_log.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_background_service/flutter_background_service.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:telephony/telephony.dart';

Future<void> initializeService() async {
  // SharedPreferences preferences = await SharedPreferences.getInstance();

  final service = FlutterBackgroundService();

  await service.configure(
    androidConfiguration: AndroidConfiguration(
      // this will be executed when app is in foreground or background in separated isolate
      onStart: onStart,
      // auto start service
      autoStart: true,
      isForegroundMode: true,
    ),
    iosConfiguration: IosConfiguration(
      // auto start service
      autoStart: true,
      // this will be executed when app is in foreground in separated isolate
      onForeground: onStart,
      // you have to enable background fetch capability on xcode project
      onBackground: onIosBackground,
    ),
  );
  service.startService();
}
// }

bool onIosBackground(ServiceInstance service) {
  WidgetsFlutterBinding.ensureInitialized();
  print('FLUTTER BACKGROUND FETCH');
  return true;
}

void onStart(ServiceInstance service) async {
  DartPluginRegistrant.ensureInitialized();
  int flag = 0;
  String? phoneNum = "";
  int? callRecords = 0;
  String callState;
  service.on('stopService').listen((event) {
    service.stopSelf();
  });
  Timer.periodic(const Duration(seconds: 1), (timer) async {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    CallState state = await Telephony.instance.callState;
    callState = state.name;
    // print("$callState$flag");
    // print(entry.first.duration);
    String? ref = prefs.getString('refSms');
    String? con = prefs.getString('conSms');
    String? call = prefs.getString('callSms');
    String? idle = prefs.getString('idleSms');
    bool? callSw = prefs.getBool('callSwitch');
    bool? idleSw = prefs.getBool('idleSwitch');
    int? numberSet = prefs.getInt("numIndex");
    List<String>? numberList = prefs.getStringList("addressList") ;
    List<String>? noNumberList = prefs.getStringList("specified");
    print("号码设置$numberSet 通讯列表$numberList  指定不发送$noNumberList");
    if (callState == "IDLE") {
      if (flag != 0) {
        final Iterable<CallLogEntry> entry = await CallLog.query();
        phoneNum = entry.first.number;
        callRecords = entry.first.duration;
        print(phoneNum);
        switch (numberSet) {
          case 0:
            if (!(noNumberList!.contains(phoneNum))) {
              if (flag > 0) {
                print("来电拒接/未接");
                print("${phoneNum!}:${ref!}");
                Telephony.backgroundInstance
                    .sendSms(to: phoneNum!, message: ref);
                print("发送成功");
              } else if (flag == -1) {
                print("来电接听");
                print("${phoneNum!}:${con!}");
                Telephony.backgroundInstance
                    .sendSms(to: phoneNum!, message: con);
              } else {
                if (entry.first.duration! > 0) {
                  if (callSw!) {
                    print(callSw);
                    print("${phoneNum!}:${call!}");
                    Telephony.backgroundInstance
                        .sendSms(to: phoneNum!, message: call);
                  }
                  print("去电接听");
                } else {
                  if (idleSw!) {
                    print(idleSw);
                    print("${phoneNum!}:${idle!}");
                    Telephony.backgroundInstance
                        .sendSms(to: phoneNum!, message: idle);
                  }
                  print("去电未接");
                }
                print("发送成功");
              }
              flag = 0;
            }else{
              print("123412434124132312232341241242321312312323123323");
            }
            break;
          case 1:
            if ((numberList!.contains(phoneNum)) &&
                !(noNumberList!.contains(phoneNum))) {
              if (flag > 0) {
                print("来电拒接/未接");
                print("${phoneNum!}:${ref!}");
                Telephony.backgroundInstance
                    .sendSms(to: phoneNum!, message: ref);
                print("发送成功");
              } else if (flag == -1) {
                print("来电接听");
                print("${phoneNum!}:${con!}");
                Telephony.backgroundInstance
                    .sendSms(to: phoneNum!, message: con);
              } else {
                if (entry.first.duration! > 0) {
                  if (callSw!) {
                    print(callSw);
                    print("${phoneNum!}:${call!}");
                    Telephony.backgroundInstance
                        .sendSms(to: phoneNum!, message: call);
                  }
                  print("去电接听");
                } else {
                  if (idleSw!) {
                    print(idleSw);
                    print("${phoneNum!}:${idle!}");
                    Telephony.backgroundInstance
                        .sendSms(to: phoneNum!, message: idle);
                  }
                  print("去电未接");
                }
                print("发送成功");
              }
              flag = 0;
            }else{
              print("123412434124132312232341241242321312312323123323");
            }
            break;
          case 2:
            if (!(numberList!.contains(phoneNum)) &&
                !(noNumberList!.contains(phoneNum))) {
              if (flag > 0) {
                print("来电拒接/未接");
                print("${phoneNum!}:${ref!}");
                Telephony.backgroundInstance
                    .sendSms(to: phoneNum!, message: ref);
                print("发送成功");
              } else if (flag == -1) {
                print("来电接听");
                print("${phoneNum!}:${con!}");
                Telephony.backgroundInstance
                    .sendSms(to: phoneNum!, message: con);
              } else {
                if (entry.first.duration! > 0) {
                  if (callSw!) {
                    print(callSw);
                    print("${phoneNum!}:${call!}");
                    Telephony.backgroundInstance
                        .sendSms(to: phoneNum!, message: call);
                  }
                  print("去电接听");
                } else {
                  if (idleSw!) {
                    print(idleSw);
                    print("${phoneNum!}:${idle!}");
                    Telephony.backgroundInstance
                        .sendSms(to: phoneNum!, message: idle);
                  }
                  print("去电未接");
                }
                print("发送成功");
              }
              flag = 0;
            }else{
              print("123412434124132312232341241242321312312323123323");
            }
            break;
        }
      }
    } else if (callState == "RINGING") {
      //响铃
      flag = 1;
      print('通话');
    } else if (callState == "OFFHOOK") {
      //通话
      if (flag > 0) flag *= -1;
      if (flag == 0) flag = -2;
      print('不通话');
    }
  });
}
