/// قرارداد یوزکیس: هر یوزکیس با یک پارامتر فراخوانی می‌شود و یک Future برمی‌گرداند.
abstract class UseCase<T, P> {
  Future<T> call(P params);
}

/// نبودِ پارامتر (برای یوزکیس‌های بدون ورودی).
class NoParams {
  const NoParams();
}

/// پارامتر بررسی کد یک‌بارمصرف.
class OtpParams {
  final String mobile;
  final String token;
  const OtpParams(this.mobile, this.token);
}

/// پارامتر به‌روزرسانی پروفایل (نام و آواتار).
class ProfileParams {
  final String firstName;
  final String avatar;
  const ProfileParams(this.firstName, this.avatar);
}

/// پارامتر خرید درون‌برنامه‌ای (IAP).
class PurchaseParams {
  final String store;
  final String kind;
  final String productId;
  final String token;
  final String purchaseData;
  final String signature;
  const PurchaseParams({
    required this.store,
    required this.kind,
    required this.productId,
    required this.token,
    this.purchaseData = '',
    this.signature = '',
  });
}
