//
// Copyright 2026 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//

import UIKit

/// A `UITableViewDiffableDataSource` that exposes hooks into various
/// `UITableViewDataSource` APIs that callers may be interested in.
public class OWSTableViewDiffableDataSource<
    SectionIdentifier: Hashable,
    ItemIdentifier: Hashable,
>: UITableViewDiffableDataSource<
    SectionIdentifier,
    ItemIdentifier,
> {

    public var canMoveRow: ((_ indexPath: IndexPath) -> Bool)?
    public var didMoveRow: ((_ sourceIndexPath: IndexPath, _ destinationIndexPath: IndexPath) -> Void)?

    override public func tableView(
        _ tableView: UITableView,
        canMoveRowAt indexPath: IndexPath,
    ) -> Bool {
        canMoveRow?(indexPath) ?? true
    }

    override public func tableView(
        _ tableView: UITableView,
        moveRowAt sourceIndexPath: IndexPath,
        to destinationIndexPath: IndexPath,
    ) {
        didMoveRow?(sourceIndexPath, destinationIndexPath)
    }
}
