import Foundation

enum AutoCompleter {
    /// Finds the next card that can be auto-moved to a foundation.
    /// Returns the source location and foundation index, or nil if no move is available.
    static func findNextAutoMove(state: GameSnapshot, rules: GameRules) -> (from: CardLocation, to: CardLocation)? {
        // Check waste pile
        if let topWaste = state.waste.last {
            for (i, foundation) in state.foundations.enumerated() {
                if MoveValidator.canPlaceOnFoundation(topWaste, topCard: foundation.last) {
                    return (.waste, .foundation(i))
                }
            }
        }

        // Check free cells
        for (cellIndex, cell) in state.freeCells.enumerated() {
            guard let card = cell else { continue }
            for (i, foundation) in state.foundations.enumerated() {
                if MoveValidator.canPlaceOnFoundation(card, topCard: foundation.last) {
                    return (.freeCell(cellIndex), .foundation(i))
                }
            }
        }

        // Check tableau tops
        for (tabIndex, tableau) in state.tableaus.enumerated() {
            guard let topCard = tableau.last, topCard.isFaceUp else { continue }
            for (i, foundation) in state.foundations.enumerated() {
                if MoveValidator.canPlaceOnFoundation(topCard, topCard: foundation.last) {
                    return (.tableau(tabIndex), .foundation(i))
                }
            }
        }

        return nil
    }
}
