11import Foundation
22import Alamofire
3+ import WooFoundationCore
34
45public actor POSLocalCatalogEligibilityService : POSLocalCatalogEligibilityServiceProtocol {
56 private let catalogSizeChecker : POSCatalogSizeCheckerProtocol
7+ private let systemStatusService : POSSystemStatusServiceProtocol
68 private let catalogSizeLimit : Int
79 private let isLocalCatalogFeatureFlagEnabled : Bool
810
@@ -15,14 +17,17 @@ public actor POSLocalCatalogEligibilityService: POSLocalCatalogEligibilityServic
1517 /// Initialize eligibility service
1618 /// - Parameters:
1719 /// - catalogSizeChecker: Service to check catalog size for sites
20+ /// - systemStatusService: Service to check WooCommerce plugin version
1821 /// - isLocalCatalogFeatureFlagEnabled: Whether the local catalog feature flag is enabled
1922 /// - catalogSizeLimit: Maximum allowed catalog size (products + variations)
2023 public init (
2124 catalogSizeChecker: POSCatalogSizeCheckerProtocol ,
25+ systemStatusService: POSSystemStatusServiceProtocol ,
2226 isLocalCatalogFeatureFlagEnabled: Bool ,
2327 catalogSizeLimit: Int ? = nil
2428 ) {
2529 self . catalogSizeChecker = catalogSizeChecker
30+ self . systemStatusService = systemStatusService
2631 self . isLocalCatalogFeatureFlagEnabled = isLocalCatalogFeatureFlagEnabled
2732 self . catalogSizeLimit = catalogSizeLimit ?? Constants . defaultCatalogSizeLimit
2833 }
@@ -76,6 +81,41 @@ public actor POSLocalCatalogEligibilityService: POSLocalCatalogEligibilityServic
7681 return state
7782 }
7883
84+ // Check WooCommerce version - local catalog requires 10.3.0 or higher
85+ do {
86+ let pluginInfo = try await systemStatusService. loadWooCommercePluginAndPOSFeatureSwitch ( siteID: siteID)
87+
88+ guard let wcPlugin = pluginInfo. wcPlugin, wcPlugin. active else {
89+ let state = POSLocalCatalogEligibilityState . ineligible ( reason: . posTabNotEligible)
90+ eligibilityStates [ siteID] = state
91+ DDLogInfo ( " 📋 POSLocalCatalogEligibilityService: WooCommerce plugin not found or inactive for site \( siteID) " )
92+ return state
93+ }
94+
95+ guard VersionHelpers . isVersionSupported ( version: wcPlugin. version,
96+ minimumRequired: Constants . wcPluginMinimumVersionForLocalCatalog) else {
97+ let state = POSLocalCatalogEligibilityState . ineligible (
98+ reason: . unsupportedWooCommerceVersion( minimumVersion: Constants . wcPluginMinimumVersionForLocalCatalog)
99+ )
100+ eligibilityStates [ siteID] = state
101+ DDLogInfo ( " 📋 POSLocalCatalogEligibilityService: WooCommerce version \( wcPlugin. version) below minimum " +
102+ " \( Constants . wcPluginMinimumVersionForLocalCatalog) for site \( siteID) " )
103+ return state
104+ }
105+
106+ DDLogInfo ( " 📋 POSLocalCatalogEligibilityService: WooCommerce version \( wcPlugin. version) meets minimum requirement for site \( siteID) " )
107+ } catch AFError . explicitlyCancelled , is CancellationError {
108+ throw POSCatalogSyncError . requestCancelled
109+ } catch {
110+ let errorString = String ( describing: error)
111+ let state = POSLocalCatalogEligibilityState . ineligible (
112+ reason: . catalogSizeCheckFailed( underlyingError: errorString)
113+ )
114+ eligibilityStates [ siteID] = state
115+ DDLogError ( " 📋 POSLocalCatalogEligibilityService: Failed to check WooCommerce version for site \( siteID) : \( error) " )
116+ return state
117+ }
118+
79119 // Fetch remote catalog size and check against limit
80120 do {
81121 let size = try await catalogSizeChecker. checkCatalogSize ( for: siteID)
@@ -112,5 +152,6 @@ public actor POSLocalCatalogEligibilityService: POSLocalCatalogEligibilityServic
112152private extension POSLocalCatalogEligibilityService {
113153 enum Constants {
114154 static let defaultCatalogSizeLimit = 1000
155+ static let wcPluginMinimumVersionForLocalCatalog = " 10.3.0-beta "
115156 }
116157}
0 commit comments