import 'package:flutter/foundation.dart';
import 'contract_signing_service.dart';

/// 合同检查结果
class ContractCheckResult {
  /// 是否有待签署的合同
  final bool hasPendingContracts;

  /// 是否需要先完成 KYC
  final bool requiresKyc;

  /// 需要 KYC 时的提示消息
  final String? kycMessage;

  /// 已付款但未完成 KYC 的订单数量
  final int paidOrderCount;

  ContractCheckResult({
    required this.hasPendingContracts,
    required this.requiresKyc,
    this.kycMessage,
    this.paidOrderCount = 0,
  });

  /// 是否需要强制操作（有待签署合同或需要 KYC）
  bool get requiresAction => hasPendingContracts || requiresKyc;
}

/// 合同检查服务
/// 用于在 App 启动时检查用户是否有未签署的合同或需要完成 KYC
class ContractCheckService {
  final ContractSigningService _contractSigningService;

  ContractCheckService({
    required ContractSigningService contractSigningService,
  }) : _contractSigningService = contractSigningService;

  /// 检查是否有待签署的合同
  /// 返回 true 表示有待签署合同，需要强制签署
  Future<bool> hasPendingContracts() async {
    try {
      // 获取未签署任务（包括待签署和超时未签署的）
      final unsignedTasks = await _contractSigningService.getUnsignedTasks();
      return unsignedTasks.isNotEmpty;
    } catch (e) {
      // debugPrint('[ContractCheckService] 检查待签署合同失败: $e');
      // 检查失败时不阻止用户使用 App
      return false;
    }
  }

  /// 综合检查：待签署合同和 KYC 需求
  ///
  /// 返回检查结果，包含：
  /// - 是否有待签署的合同
  /// - 是否需要先完成 KYC（有已付款订单但未完成 KYC）
  Future<ContractCheckResult> checkAll() async {
    try {
      // 1. 检查未签署的合同
      final unsignedTasks = await _contractSigningService.getUnsignedTasks();
      final hasPending = unsignedTasks.isNotEmpty;

      // 2. 如果有待签署的合同，直接返回（不需要再检查 KYC）
      if (hasPending) {
        // debugPrint('[ContractCheckService] 检测到 ${unsignedTasks.length} 个待签署合同');
        return ContractCheckResult(
          hasPendingContracts: true,
          requiresKyc: false,
        );
      }

      // 3. 没有待签署合同，检查是否有需要 KYC 的情况
      final kycResult = await _contractSigningService.checkKycRequirement();

      return ContractCheckResult(
        hasPendingContracts: false,
        requiresKyc: kycResult.requiresKyc,
        kycMessage: kycResult.message,
        paidOrderCount: kycResult.paidOrderCount,
      );
    } catch (e) {
      // debugPrint('[ContractCheckService] 综合检查失败: $e');
      // 检查失败时不阻止用户使用 App
      return ContractCheckResult(
        hasPendingContracts: false,
        requiresKyc: false,
      );
    }
  }

  /// 获取待签署合同数量
  Future<int> getPendingContractCount() async {
    try {
      final unsignedTasks = await _contractSigningService.getUnsignedTasks();
      return unsignedTasks.length;
    } catch (e) {
      // debugPrint('[ContractCheckService] 获取待签署合同数量失败: $e');
      return 0;
    }
  }
}
