# main imports
import numpy as np

# modules imports
from .Solution import Solution


# Solution which stores solution data as combinatory integer array
class CombinatoryIntegerSolution(Solution):
    def __init__(self, _data, _size):
        """
        Initialize data of solution using specific data

        - `data` field is array of integer values
        - `size` field is the size of array integer values
        """

        self.data = _data
        self.size = _size

    def random(self, _validator):
        """
        Intialize combinatory integer array using size solution data

        Use of validator to generate valid random solution
        """

        self.data = np.random.shuffle(np.arange(self.size))

        while not self.isValid(_validator):
            self.data = np.random.shuffle(np.arange(self.size))

        return self

    def __str__(self):
        return "Combinatory integer solution %s" % (self.data)
