package solver

import (
	"log"
	"runtime"
	"strconv"
)

func Run() {
	// Instantiate the Solver interface
	solver := Solver{}

	// Parse and handle flags
	solver.parse_flags()

	// Report number of CPUs being used, if set.
	if runtime.NumCPU() != solver.numcpus {
		log.Println("Using " + strconv.Itoa(solver.numcpus) + " CPUs, (was " + strconv.Itoa(runtime.NumCPU()) + ")")
	}

	// Load blocks from CSV file
	solver.load_blocks()

	// Find rows that fit with the entered rows
	solver.populate_blocks()

	// If needed, split the workload
	// May exit and throw an error if the work load isn't viable
	if solver.split != 1 {
		solver.select_workload()
	}

	// Print the total number of solutions to validate
	log.Println("Number of (potential) solutions:", solver.iter)

	// Check the number of solutions
	go solver.check_combinations()
	solver.tracker()

	// Print the valid solutions
	solver.print_solutions()

}