// swift-tools-version:5.6
import PackageDescription

let package = Package(
  name: "client-ios",
  defaultLocalization: "en",
  platforms: [
    .iOS(.v14),
  ],
  products: [
    .library(name: "App", targets: ["App"]),
    .library(name: "Shared", targets: ["Shared"]),
    .library(name: "XXLogger", targets: ["XXLogger"]),
    .library(name: "Defaults", targets: ["Defaults"]),
    .library(name: "Keychain", targets: ["Keychain"]),
    .library(name: "Voxophone", targets: ["Voxophone"]),
    .library(name: "Countries", targets: ["Countries"]),
    .library(name: "InputField", targets: ["InputField"]),
    .library(name: "ScanFeature", targets: ["ScanFeature"]),
    .library(name: "Permissions", targets: ["Permissions"]),
    .library(name: "MenuFeature", targets: ["MenuFeature"]),
    .library(name: "ChatFeature", targets: ["ChatFeature"]),
    .library(name: "PushFeature", targets: ["PushFeature"]),
    .library(name: "CrashService", targets: ["CrashService"]),
    .library(name: "TermsFeature", targets: ["TermsFeature"]),
    .library(name: "XXNavigation", targets: ["XXNavigation"]),
    .library(name: "Presentation", targets: ["Presentation"]),
    .library(name: "BackupFeature", targets: ["BackupFeature"]),
    .library(name: "LaunchFeature", targets: ["LaunchFeature"]),
    .library(name: "SearchFeature", targets: ["SearchFeature"]),
    .library(name: "DrawerFeature", targets: ["DrawerFeature"]),
    .library(name: "CollectionView", targets: ["CollectionView"]),
    .library(name: "RestoreFeature", targets: ["RestoreFeature"]),
    .library(name: "CrashReporting", targets: ["CrashReporting"]),
    .library(name: "ProfileFeature", targets: ["ProfileFeature"]),
    .library(name: "ContactFeature", targets: ["ContactFeature"]),
    .library(name: "NetworkMonitor", targets: ["NetworkMonitor"]),
    .library(name: "VersionChecking", targets: ["VersionChecking"]),
    .library(name: "SettingsFeature", targets: ["SettingsFeature"]),
    .library(name: "ChatListFeature", targets: ["ChatListFeature"]),
    .library(name: "RequestsFeature", targets: ["RequestsFeature"]),
    .library(name: "ChatInputFeature", targets: ["ChatInputFeature"]),
    .library(name: "OnboardingFeature", targets: ["OnboardingFeature"]),
    .library(name: "ContactListFeature", targets: ["ContactListFeature"]),
    .library(name: "ReportingFeature", targets: ["ReportingFeature"])
  ],
  dependencies: [
    .package(
      url: "https://github.com/Quick/Quick",
      .upToNextMajor(from: "3.0.0")
    ),
    .package(
      url: "https://github.com/Quick/Nimble",
      .upToNextMajor(from: "9.0.0")
    ),
    .package(
      url: "https://github.com/SnapKit/SnapKit",
      .upToNextMajor(from: "5.0.1")
    ),
    .package(
      url: "https://github.com/icanzilb/Retry.git",
      .upToNextMajor(from: "0.6.3")
    ),
    .package(
      url: "https://github.com/ekazaev/ChatLayout",
      .upToNextMajor(from: "1.1.14")
    ),
    .package(
      url: "https://github.com/ra1028/DifferenceKit",
      .upToNextMajor(from: "1.2.0")
    ),
    .package(
      url: "https://github.com/apple/swift-protobuf",
      .upToNextMajor(from: "1.14.0")
    ),
    .package(
      url: "https://github.com/SwiftyBeaver/SwiftyBeaver.git",
      .upToNextMajor(from: "1.9.5")
    ),
    .package(
      url: "https://github.com/darrarski/ScrollViewController",
      .upToNextMajor(from: "1.2.0")
    ),
    .package(
      url: "https://github.com/pointfreeco/combine-schedulers",
      .upToNextMajor(from: "0.5.0")
    ),
    .package(
      url: "https://github.com/kishikawakatsumi/KeychainAccess",
      .upToNextMajor(from: "4.2.1")
    ),
    .package(
      path: "../elixxir-dapps-sdk-swift"
      //url: "https://git.xx.network/elixxir/elixxir-dapps-sdk-swift",
      //branch: "development"
    ),
    .package(
      path: "../xxm-cloud-providers"
    ),
    .package(
      path: "../Router-PoC/Navigation"
    ),
    .package(
      url: "https://git.xx.network/elixxir/client-ios-db.git",
      .upToNextMajor(from: "1.1.0")
    ),
    .package(
      url: "https://github.com/firebase/firebase-ios-sdk.git",
      .upToNextMajor(from: "8.10.0")
    ),
    .package(
      url: "https://github.com/pointfreeco/swift-composable-architecture.git",
      .upToNextMajor(from: "0.32.0")
    ),
    .package(
      url: "https://github.com/pointfreeco/swift-custom-dump.git",
      .upToNextMajor(from: "0.5.0")
    ),
    .package(
      url: "https://github.com/swiftcsv/SwiftCSV.git",
      from: "0.8.0"
    ),
    .package(
      url: "https://github.com/pointfreeco/xctest-dynamic-overlay.git",
      .upToNextMajor(from: "0.3.3")
    ),
    .package(
      url: "https://git.xx.network/elixxir/xxm-di.git",
      .upToNextMajor(from: "1.0.0")
    )
  ],
  targets: [
    .target(
      name: "App",
      dependencies: [
        .target(name: "Keychain"),
        .target(name: "Voxophone"),
        .target(name: "Permissions"),
        .target(name: "ScanFeature"),
        .target(name: "ChatFeature"),
        .target(name: "MenuFeature"),
        .target(name: "PushFeature"),
        .target(name: "XXNavigation"),
        .target(name: "TermsFeature"),
        .target(name: "CrashService"),
        .target(name: "BackupFeature"),
        .target(name: "SearchFeature"),
        .target(name: "LaunchFeature"),
        .target(name: "ContactFeature"),
        .target(name: "RestoreFeature"),
        .target(name: "ProfileFeature"),
        .target(name: "CrashReporting"),
        .target(name: "ChatListFeature"),
        .target(name: "SettingsFeature"),
        .target(name: "RequestsFeature"),
        .target(name: "ReportingFeature"),
        .target(name: "OnboardingFeature"),
        .target(name: "ContactListFeature"),
      ]
    ),
    .testTarget(
      name: "AppTests",
      dependencies: [
        .target(name: "App"),
      ]
    ),
    .target(
      name: "CrashReporting"
    ),
    .target(
      name: "NetworkMonitor",
      dependencies: [
        .product(name: "XXClient", package: "elixxir-dapps-sdk-swift"),
      ]
    ),
    .target(
      name: "VersionChecking"
    ),
    .target(
      name: "InputField",
      dependencies: [
        .target(name: "Shared"),
      ]
    ),
    .target(
      name: "Permissions",
      dependencies: [
        .target(name: "Shared"),
        .target(name: "XXNavigation"),
        .product(name: "DependencyInjection", package: "xxm-di"),
      ]
    ),
    .target(
      name: "XXNavigation",
      dependencies: [
        .target(name: "DrawerFeature"),
        .product(name: "DependencyInjection", package: "xxm-di"),
        .product(name: "Navigation", package: "Navigation"),
        .product(name: "XXModels", package: "client-ios-db"),
      ]
    ),
    .target(
      name: "PushFeature",
      dependencies: [
        .target(name: "Defaults"),
        .target(name: "ReportingFeature"),
        .product(name: "DependencyInjection", package: "xxm-di"),
        .product(name: "XXDatabase", package: "client-ios-db"),
        .product(name: "XXClient", package: "elixxir-dapps-sdk-swift"),
        .product(name: "XXMessengerClient", package: "elixxir-dapps-sdk-swift"),
      ]
    ),
    .target(
      name: "Keychain",
      dependencies: [
        .product(name: "KeychainAccess", package: "KeychainAccess"),
      ]
    ),
    .target(
      name: "Voxophone",
      dependencies: [
        .target(name: "Shared"),
      ]
    ),
    .target(
      name: "Defaults",
      dependencies: [
        .product(name: "DependencyInjection", package: "xxm-di"),
      ]
    ),
    .target(
      name: "CrashService",
      dependencies: [
        .target(name: "CrashReporting"),
        .product(name: "FirebaseCrashlytics", package: "firebase-ios-sdk"),
      ]
    ),
    .target(
      name: "Countries",
      dependencies: [
        .target(name: "Shared"),
        .target(name: "XXNavigation"),
        .product(name: "DependencyInjection", package: "xxm-di"),
      ]
    ),
    .target(
      name: "DrawerFeature",
      dependencies: [
        .target(name: "Shared"),
        .target(name: "InputField"),
        .product(name: "ScrollViewController", package: "ScrollViewController"),
      ]
    ),
    .target(
      name: "XXLogger",
      dependencies: [
        .product(name: "SwiftyBeaver", package: "SwiftyBeaver"),
      ]
    ),
    .target(
      name: "Shared",
      dependencies: [
        .product(name: "SnapKit", package: "SnapKit"),
        .product(name: "ChatLayout", package: "ChatLayout"),
        .product(name: "DifferenceKit", package: "DifferenceKit"),
        .product(name: "SwiftProtobuf", package: "swift-protobuf"),
      ],
      exclude: [
        "swiftgen.yml",
      ],
      resources: [
        .process("Resources"),
      ]
    ),
    .target(
      name: "Presentation",
      dependencies: [
        .target(name: "Shared"),
        .product(name: "SnapKit", package: "SnapKit"),
      ]
    ),
    .testTarget(
      name: "PresentationTests",
      dependencies: [
        .target(name: "Presentation"),
        .product(name: "Quick", package: "Quick"),
        .product(name: "Nimble", package: "Nimble"),
      ]
    ),
    .target(
      name: "ChatInputFeature",
      dependencies: [
        .target(name: "Voxophone"),
        .product(name: "ComposableArchitecture", package: "swift-composable-architecture"),
      ]
    ),
    .target(
      name: "RestoreFeature",
      dependencies: [
        .target(name: "Shared"),
        .target(name: "Presentation"),
        .target(name: "XXNavigation"),
        .product(name: "DependencyInjection", package: "xxm-di"),
        .product(name: "XXDatabase", package: "client-ios-db"),
        .product(name: "XXClient", package: "elixxir-dapps-sdk-swift"),
        .product(name: "CloudFilesDrive", package: "xxm-cloud-providers"),
        .product(name: "CloudFilesDropbox", package: "xxm-cloud-providers"),
        .product(name: "CloudFilesSFTP", package: "xxm-cloud-providers"),
        .product(name: "CloudFilesICloud", package: "xxm-cloud-providers"),
      ]
    ),
    .target(
      name: "ContactFeature",
      dependencies: [
        .target(name: "Shared"),
        .target(name: "InputField"),
        .target(name: "ChatFeature"),
        .target(name: "Presentation"),
        .product(name: "CombineSchedulers", package: "combine-schedulers"),
        .product(name: "ScrollViewController", package: "ScrollViewController"),
      ]
    ),
    .target(
      name: "ChatFeature",
      dependencies: [
        .target(name: "Shared"),
        .target(name: "Defaults"),
        .target(name: "Keychain"),
        .target(name: "Voxophone"),
        .target(name: "Permissions"),
        .target(name: "Presentation"),
        .target(name: "XXNavigation"),
        .target(name: "DrawerFeature"),
        .target(name: "ChatInputFeature"),
        .target(name: "ReportingFeature"),
        .product(name: "DependencyInjection", package: "xxm-di"),
        .product(name: "ChatLayout", package: "ChatLayout"),
        .product(name: "DifferenceKit", package: "DifferenceKit"),
        .product(name: "XXClient", package: "elixxir-dapps-sdk-swift"),
        .product(name: "XXMessengerClient", package: "elixxir-dapps-sdk-swift"),
        .product(name: "ScrollViewController", package: "ScrollViewController"),
      ]
    ),
    .target(
      name: "SearchFeature",
      dependencies: [
        .target(name: "Shared"),
        .target(name: "Countries"),
        .target(name: "PushFeature"),
        .target(name: "Presentation"),
        .target(name: "ContactFeature"),
        .target(name: "NetworkMonitor"),
        .product(name: "DependencyInjection", package: "xxm-di"),
        .product(name: "Retry", package: "Retry"),
        .product(name: "XXDatabase", package: "client-ios-db"),
      ]
    ),
    .target(
      name: "LaunchFeature",
      dependencies: [
        .target(name: "Shared"),
        .target(name: "Defaults"),
        .target(name: "PushFeature"),
        .target(name: "Permissions"),
        .target(name: "BackupFeature"),
        .target(name: "VersionChecking"),
        .target(name: "ReportingFeature"),
        .product(name: "DependencyInjection", package: "xxm-di"),
        .product(name: "XXClient", package: "elixxir-dapps-sdk-swift"),
        .product(name: "CloudFilesSFTP", package: "xxm-cloud-providers"),
        .product(name: "CombineSchedulers", package: "combine-schedulers"),
        .product(name: "CloudFilesDropbox", package: "xxm-cloud-providers"),
        .product(name: "XXLegacyDatabaseMigrator", package: "client-ios-db"),
        .product(name: "XXMessengerClient", package: "elixxir-dapps-sdk-swift"),
      ]
    ),
    .target(
      name: "TermsFeature",
      dependencies: [
        .target(name: "Shared"),
        .target(name: "Defaults"),
        .target(name: "Presentation"),
        .target(name: "XXNavigation"),
      ]
    ),
    .target(
      name: "RequestsFeature",
      dependencies: [
        .target(name: "Shared"),
        .target(name: "ContactFeature"),
        .product(name: "DependencyInjection", package: "xxm-di"),
        .product(name: "DifferenceKit", package: "DifferenceKit"),
      ]
    ),
    .target(
      name: "ProfileFeature",
      dependencies: [
        .target(name: "Shared"),
        .target(name: "Keychain"),
        .target(name: "Defaults"),
        .target(name: "Countries"),
        .target(name: "InputField"),
        .target(name: "MenuFeature"),
        .target(name: "Permissions"),
        .target(name: "Presentation"),
        .target(name: "DrawerFeature"),
        .target(name: "BackupFeature"),
        .product(name: "DependencyInjection", package: "xxm-di"),
        .product(name: "CombineSchedulers", package: "combine-schedulers"),
        .product(name: "ScrollViewController", package: "ScrollViewController"),
        .product(name: "XXClient", package: "elixxir-dapps-sdk-swift"),
        .product(name: "XXMessengerClient", package: "elixxir-dapps-sdk-swift"),
      ]
    ),
    .target(
      name: "ChatListFeature",
      dependencies: [
        .target(name: "Shared"),
        .target(name: "Defaults"),
        .target(name: "MenuFeature"),
        .target(name: "ChatFeature"),
        .target(name: "XXNavigation"),
        .target(name: "ProfileFeature"),
        .target(name: "SettingsFeature"),
        .target(name: "ContactListFeature"),
        .product(name: "DependencyInjection", package: "xxm-di"),
        .product(name: "DifferenceKit", package: "DifferenceKit"),
      ]
    ),
    .target(
      name: "OnboardingFeature",
      dependencies: [
        .target(name: "Shared"),
        .target(name: "Defaults"),
        .target(name: "Keychain"),
        .target(name: "Countries"),
        .target(name: "InputField"),
        .target(name: "Permissions"),
        .target(name: "PushFeature"),
        .target(name: "Presentation"),
        .target(name: "DrawerFeature"),
        .target(name: "VersionChecking"),
        .product(name: "DependencyInjection", package: "xxm-di"),
        .product(name: "CombineSchedulers", package: "combine-schedulers"),
        .product(name: "ScrollViewController", package: "ScrollViewController"),
      ]
    ),
    .target(
      name: "MenuFeature",
      dependencies: [
        .target(name: "Shared"),
        .target(name: "Defaults"),
        .target(name: "Presentation"),
        .target(name: "XXNavigation"),
        .target(name: "DrawerFeature"),
        .target(name: "ReportingFeature"),
        .product(name: "DependencyInjection", package: "xxm-di"),
        .product(name: "XXClient", package: "elixxir-dapps-sdk-swift"),
      ]
    ),
    .target(
      name: "BackupFeature",
      dependencies: [
        .target(name: "Shared"),
        .target(name: "InputField"),
        .target(name: "Presentation"),
        .target(name: "DrawerFeature"),
        .target(name: "NetworkMonitor"),
        .product(name: "DependencyInjection", package: "xxm-di"),
        .product(name: "XXClient", package: "elixxir-dapps-sdk-swift"),
        .product(name: "CloudFilesSFTP", package: "xxm-cloud-providers"),
        .product(name: "CloudFilesDrive", package: "xxm-cloud-providers"),
        .product(name: "CloudFilesICloud", package: "xxm-cloud-providers"),
        .product(name: "CloudFilesDropbox", package: "xxm-cloud-providers"),
        .product(name: "XXMessengerClient", package: "elixxir-dapps-sdk-swift"),
      ]
    ),
    .target(
      name: "ScanFeature",
      dependencies: [
        .target(name: "Shared"),
        .target(name: "Countries"),
        .target(name: "Permissions"),
        .target(name: "Presentation"),
        .target(name: "ContactFeature"),
        .target(name: "NetworkMonitor"),
        .product(name: "DependencyInjection", package: "xxm-di"),
        .product(name: "SnapKit", package: "SnapKit"),
      ]
    ),
    .target(
      name: "ContactListFeature",
      dependencies: [
        .target(name: "Shared"),
        .target(name: "Presentation"),
        .target(name: "ContactFeature"),
        .product(name: "DependencyInjection", package: "xxm-di"),
        .product(name: "DifferenceKit", package: "DifferenceKit"),
      ]
    ),
    .target(
      name: "SettingsFeature",
      dependencies: [
        .target(name: "Shared"),
        .target(name: "Defaults"),
        .target(name: "Keychain"),
        .target(name: "XXLogger"),
        .target(name: "InputField"),
        .target(name: "PushFeature"),
        .target(name: "Permissions"),
        .target(name: "MenuFeature"),
        .target(name: "Presentation"),
        .target(name: "DrawerFeature"),
        .product(name: "DependencyInjection", package: "xxm-di"),
        .product(name: "CombineSchedulers", package: "combine-schedulers"),
        .product(name: "ScrollViewController", package: "ScrollViewController"),
      ]
    ),
    .target(
      name: "CollectionView",
      dependencies: [
        .product(name: "ChatLayout", package: "ChatLayout"),
        .product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay"),
      ]
    ),
    .testTarget(
      name: "CollectionViewTests",
      dependencies: [
        .target(name: "CollectionView"),
        .product(name: "CustomDump", package: "swift-custom-dump"),
      ]
    ),
    .target(
      name: "ReportingFeature",
      dependencies: [
        .target(name: "DrawerFeature"),
        .target(name: "Shared"),
        .product(name: "SwiftCSV", package: "SwiftCSV"),
        .product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay"),
      ],
      resources: [
        .process("Resources"),
      ]
    ),
  ]
)