import logging
import random

#trials = 100              # Number of total trials
#T  = 20                    # Number of targets
#L1 = 10                   # Number of lures (foil) similar to the (N+1)-back
#L2 = 10                   # Number of lures (foil) similar to the (N-1)-back
#D  = trials - L1 - L2 - T  # Number of distractors

class SkewedRandomGenerator:
  """Generates random sequence of stimuli for the n-back task. Implementation is based on Ralph (2014)."""

  seq = []

  def __init__(self,
               N = 2, 
               alphabet=['A','B','C','D','E','F'], 
               target='A', 
               trials = 100, 
               T = 20, 
               L1 = 10, 
               L2 = 10):
    self.N, self.alphabet, self.target, self.trials, self.T, self.L1, self.L2 = N, alphabet, target, trials, T, L1, L2
    self.D = trials - T - L1 - L2
    try:
      self.alphabet.remove(target)
    except ValueError:
      #logging.info('Nice, alphabet does not contain the target stimulus!')
      pass

  def generate(self):

    pass

  def random_trial(self, trial):
    rnd = random.randint(1, self.trials - trial + 1)
    T, L1, L2 = self.T, self.L1, self.L2
    if rnd < T:
      self.T -= 1
      return self.target
    elif T <= rnd < T + L1:
      self.L1 -= 1
      return self.seq[-(self.N+1)]
    elif T + L1 <= rnd < T + L1 + L2:
      self.L2 -= 1
      return self.seq[-(self.N-1)]

    self.D -= 1
    return self.random_distractor()

  def random_distractor(self):
    pass