package solver

import (
	"sync/atomic"

	"gitea.ligthert.net/golang/sudoku-funpark/controller"
	"gitea.ligthert.net/golang/sudoku-funpark/outputter"
)

// Solve a given Sudoku puzzle by iterating through all possible solutions.
type Solver struct {
	Controller *controller.Controller
	// Slice of possible blocks for the 1st row.
	row1s []string
	// Slice of possible blocks for the 2nd row.
	row2s []string
	// Slice of possible blocks for the 3rd row.
	row3s []string
	// Slice of possible blocks for the 4th row.
	row4s []string
	// Slice of possible blocks for the 5th row.
	row5s []string
	// Slice of possible blocks for the 6th row.
	row6s []string
	// Slice of possible blocks for the 7th row.
	row7s []string
	// Slice of possible blocks for the 8th row.
	row8s []string
	// Slice of possible blocks for the 9th row.
	row9s []string
	// Maximum number of possible solutions with the current set of rows.
	Iter uint64
	// Progress counter, needs atomic due to the number of updates.
	counter atomic.Uint64
	// Slice of rates for accurate duration estimation.
	rates []uint64
	// Reference to Outputter interface
	Outp *outputter.Outputter
}
