import tkinter as tk
from tkinter.ttk import Progressbar
import pyglet

class CalibrationPopUp(tk.Frame):
  def __init__(self, root, calibration_state, conf):
    self.root = root
    self.font = pyglet.font.add_file("gui/SourceSansPro-Semibold.otf")
    self.calibration_state = calibration_state
    tk.Frame.__init__(self, root)
    self.pendingClose = False
    self.conf = conf


    self.instruction = tk.Label(self,text="Start Calibration", anchor="c",font=("SourceSansPro-Semibold", 18))
    self.instruction.pack(side="top", fill="both", expand=True)
    button = tk.Button(self,text="OK", command=self.calibration_state.next_state_gui, anchor="c",height=1,width=5)
    button.pack(side="top", fill="both", expand=True)
    self.cs = Progressbar(self, orient='horizontal', mode='determinate')
    self.cs.pack(side="top", fill="both", expand=True)

    root.bind('<Escape>', self.close)
  
  def update(self):
    if not self.root.winfo_exists():
      return
    # display captured value count as progress
    self.cs['value'] = self.calibration_state.progress
    # read state from state machine
    if self.calibration_state.get_state() == self.calibration_state.WAITING_POS_1:
      text = "Move gondola to [" + self.conf["ac_sensor"]["calibration_x_offset"] + " , " + self.conf["ac_sensor"]["calibration_y_offset_1"] + "]!"
      self.instruction["text"] = text
    elif self.calibration_state.get_state() == self.calibration_state.WAITING_POS_2:
      text = "Move gondola to [" + self.conf["ac_sensor"]["calibration_x_offset"] + " , " + self.conf["ac_sensor"]["calibration_y_offset_2"] + "]!"
      self.instruction["text"] = text
    elif self.calibration_state.get_state() == self.calibration_state.CALIBRATION_DONE:
      self.instruction["text"] = "Calibration Done!"
      if not self.pendingClose:
        self.pendingClose = True
        self.root.after(1500, self.close)
    else:
      self.instruction["text"] = "Processing..."

  def close(self):
    if self.root.winfo_exists():
      self.root.destroy()