# edit to get new phrasing of spotter instructions.
# depends on 'time' library.
import os
import time
import ac
import linecache
import configparser
import random

class i18strings:
  def __init__(self, language, player, folder):
    self.language = language
    self.langfile = os.path.join(os.path.dirname(__file__), "text", language)
    self.lang = configparser.ConfigParser()
    self.lang.read(self.langfile)
    self.audiofolder = folder
    self.audioini = os.path.join(self.audiofolder, "audio.ini")
    self.audio = configparser.ConfigParser()
    if os.path.isfile(self.audioini):
      self.audio.read(self.audioini)
    else:
      self.audio.read(os.path.join(os.path.dirname(__file__),"audio_04_compatibility.ini"))
    self.audioplayer = player
    self.sbs = 0
    self.side = 0
    self.slow = 0
    self.stopped = 0
    self.setaudio(folder)
    self.timeout = 3.0 # time to play 'stay left' type reminders
  
  
  def setlanguage(self,language):
    self.language = language
    self.langfile = os.path.join(os.path.dirname(__file__), "text", language)
    # initiate a new configparser so we don't end up with old strings for sure
    self.lang = configparser.ConfigParser()
    self.lang.read(self.langfile)
    
  def setaudio(self,folder):
    self.audiofolder = os.path.join(os.path.dirname(__file__), "audio", folder)
    self.audioini = os.path.join(self.audiofolder, "audio.ini")
    self.audio = configparser.ConfigParser()
    if os.path.isfile(self.audioini):
      self.audio.read(self.audioini)
    else:
      self.audio.read(os.path.join(os.path.dirname(__file__),"audio_04_compatibility.ini"))
  
  def priorityclip(self,group,clip):
    location = random.choice(self.audio[group][clip].split(","))
    location = os.path.join(self.audiofolder, location)
    # priority clip cancels other audio. so that eg. left both right clear can be left right clear
    self.audioplayer.stop()
    # new fmod audio:
    self.audioplayer.queueSong(location)
    
  def clip(self,group,clip):
    location = random.choice(self.audio[group][clip].split(","))
    location = os.path.join(self.audiofolder, location)
    # new fmod audio:
    self.audioplayer.queueSong(location)
    
  # functions called when it's time to print/display.  All should have same params.
   # first, the one to send when everything else is inactive.
  def NONE(self,label):
    ac.setText(label,self.lang['General'].get('no_message',''))
  def CAR_NONE(self,label): # no cars nearby
    if self.sbs != 0:
      # play "clear"
      self.clip('Proximity', 'end')
      self.sbs = 0
    return False
  def CAR_LEFT(self,label):
    ac.setText(label,self.lang['Proximity'].get('left',''))
    #ac.setText(label,"{}".format(self.langfile))
    if self.side != -1:
      self.side = -1
      self.sbs = 0
    if self.sbs == 0:
      #ac.log("Playing left clip")
      #self.audioplayer.play(self.car_left_clip)
      self.priorityclip('Proximity','left_start')
      self.sbs = time.time()
    if time.time() > self.sbs + self.timeout:
      self.sbs = time.time()
      self.clip('Proximity','left_cont')
    return True
  def CAR_RIGHT(self,label):
    ac.setText(label,self.lang['Proximity'].get('right',''))
    if self.side != 1:
      self.side = 1
      self.sbs = 0
    if self.sbs == 0:
      self.priorityclip('Proximity','right_start')
      self.sbs = time.time()
    if time.time() > self.sbs + self.timeout:
      self.sbs = time.time()
      self.clip('Proximity','right_cont')
    return True
  def CAR_BOTH(self,label):
    ac.setText(label,self.lang['Proximity'].get('both',''))
    if self.side != 0:
      self.side = 0
      self.sbs = 0
    if self.sbs == 0:
      self.priorityclip('Proximity','both_start')
      self.sbs = time.time()
    if time.time() > self.sbs + self.timeout:
      self.sbs = time.time()
      self.clip('Proximity','both_cont')
    return True
  
  
  def SLOW_NONE(self,label):
    self.slow = 0
    return False
  
  def SLOW(self,label):
    ac.setText(label,self.lang['Slow'].get('middle',''))
    if self.slow == 0:
      self.clip('Slow', 'ahead')
      self.slow = time.time()
    return True
  
  def SLOW_LEFT(self,label):
    ac.setText(label,self.lang['Slow'].get('left',''))
    if self.slow == 0:
      self.clip('Slow', 'left')
      self.slow = time.time()
    return True
  
  def SLOW_RIGHT(self,label):
    ac.setText(label,self.lang['Slow'].get('right',''))
    if self.slow == 0:
      self.clip('Slow', 'right')
      self.slow = time.time()
    return True
  
  
  def STOPPED_NONE(self,label):
    self.stopped = 0
    return False
  
  def STOPPED(self,label):
    ac.setText(label,self.lang['Stop'].get('middle',''))
    if self.stopped == 0:
      self.clip('Stop', 'ahead')
      self.stopped = time.time()
    return True
  
  def STOPPED_LEFT(self,label):
    ac.setText(label,self.lang['Stop'].get('left',''))
    if self.stopped == 0:
      self.clip('Stop', 'left')
      self.stopped = time.time()
    return True
  
  def STOPPED_RIGHT(self,label):
    ac.setText(label,self.lang['Stop'].get('right',''))
    if self.stopped == 0:
      self.clip('Stop', 'right')
      self.stopped = time.time()
    return True
  
  LAP_UP = "That car's a lap ahead."
  LAP_DOWN = "That car's a lap down."
  CRASH = "Someone crashed."
  
