from generator.actions import Actions
import random
import string

class Palindrome(Actions):
    def start(self):
        #self.delay(100)
        pass

    def banner(self):
        # Confirm the initial empty line
        self.read(delim='\n', expect='\n')
        # Confirm the actual banner
        self.read(delim='\n', expect='Welcome to Palindrome Finder\n')

    def request(self):
        # Skip the empty line
        self.read(delim='\n', expect='\n')
        # Confirm the request
        self.read(length=37, expect='\tPlease enter a possible palindrome: ')

    def palindrome(self):
        halfword = self.random_string(random.randint(1, 16))
        self.write(halfword + halfword[::-1] + "\n")
        self.read(delim='\n', expect="\t\tYes, that's a palindrome!\n")

    def not_palindrome(self):
        word = self.random_string(random.randint(2, 32))
        while self.is_palindrome(word):
            word = self.random_string(random.randint(2, 32))
        
        self.write(word + "\n")
        self.read(delim='\n', expect="\t\tNope, that's not a palindrome\n")

    def is_palindrome(self, word):
        for i in range(0, len(word) / 2):
            if word[i] != word[-i - 1]:
                return False
        return True

    def random_string(self, size):
        chars = string.letters + string.digits
        return ''.join(random.choice(chars) for _ in range(size))
