#!/usr/bin/python
# -*- coding: utf-8 -*-
#
"""
    Read the args, creates GUI and add all actions of pynovisao.
    
    Name: main.py
    Author: Alessandro dos Santos Ferreira ( santosferreira.alessandro@gmail.com )
"""
import argparse

import interface

from pynovisao import Act


def get_args():
    ap = argparse.ArgumentParser()

    ap.add_argument("-d", "--dataset", required=False, help="Dataset path", default="../data/demo", type=str)
    
    ap.add_argument("-cl", "--classes", required=False, help="Classes names", default=None, type=str)
    ap.add_argument("-co", "--colors", required=False, help="Classes colors (X11 color)", default=None, type=str)
    
    return vars(ap.parse_args())


if __name__ == "__main__":
    
    tk = interface.TkInterface("Pynovisao")
    
    act = Act(tk, get_args())
    
    tk.add_menu("File")
    tk.add_command("Open a image", act.open_image, 'O') 
    tk.add_command("Restore image", act.restore_image, 'R')
    tk.add_separator()
    tk.add_command("Close image", act.close_image, 'W') 
    tk.add_separator()
    tk.add_command("Quit", tk.quit, 'Q')
    
    tk.add_menu("View")
    tk.add_check_button("Show image axes", tk.toggle_image_axes)
    tk.add_check_button("Show image toolbar", tk.toggle_image_toolbar)
    tk.add_separator()
    tk.add_check_button("Show log", tk.toggle_log)
    
    tk.add_menu("Dataset")
    tk.add_command("Add new class", act.add_class, 'A')
    tk.add_command("Set dataset path", act.set_dataset_path, 'd')
    tk.add_separator()
    tk.add_check_button("Dataset generator", act.toggle_dataset_generator, 't')
    
    tk.add_menu("Segmentation")
    tk.add_command("Choose segmenter", act.select_segmenter)
    tk.add_command("Configure", act.config_segmenter, 'g')
    tk.add_separator()
    tk.add_command("Execute", act.run_segmenter, 'S')
    
    tk.add_menu("Feature Extraction")
    tk.add_command("Select extractors", act.select_extractors, 'e')
    tk.add_separator()
    tk.add_command("Execute", act.run_extractors, 'F')
    
    tk.add_menu("Classification")
    tk.add_command("Choose classifier", act.select_classifier)
    tk.add_command("Configure", act.configure_classifier)
    tk.add_separator()
    tk.add_command("Cross Validation", act.cross_validation, 'X')
    tk.add_command("Experimenter All", act.experimenter_all, 'p')
    tk.add_separator()
    tk.add_command("Execute", act.run_classifier, 'C')
    
    tk.render_menu()
    
    tk.add_panel_classes( act.classes )
    
    tk.open_log()
    
    tk.show()