import Foundation
import SignalServiceKit

@objc
public class LK001UpdateFriendRequestStatusStorage : OWSDatabaseMigration {

    // MARK: -

    // Increment a similar constant for each migration.
    // 100-114 are reserved for Signal migrations
    @objc
    class func migrationId() -> String {
        return "001"
    }

    override public func runUp(completion: @escaping OWSDatabaseMigrationCompletion) {
        self.doMigrationAsync(completion: completion)
    }

    private func doMigrationAsync(completion: @escaping OWSDatabaseMigrationCompletion) {
        DispatchQueue.global().async {
            self.dbReadWriteConnection().readWrite { transaction in
                var threads: [TSContactThread] = []
                TSContactThread.enumerateCollectionObjects(with: transaction) { object, _ in
                    guard let thread = object as? TSContactThread else { return }
                    threads.append(thread)
                }
                threads.forEach { thread in
                    guard let friendRequestStatus = LKFriendRequestStatus(rawValue: thread.friendRequestStatus) else { return }
                    OWSPrimaryStorage.shared().setFriendRequestStatus(friendRequestStatus, for: thread.contactIdentifier(), transaction: transaction)
                }
                self.save(with: transaction)
            }
            completion()
        }
    }
}