#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
Main controller
"""

from abc import ABC, abstractmethod

__author__ = "Lemahieu Antoine"
__copyright__ = "Copyright 2022"
__credits__ = ["Lemahieu Antoine"]
__license__ = "GNU General Public License v3.0"
__maintainer__ = "Lemahieu Antoine"
__email__ = "Antoine.Lemahieu@ulb.be"
__status__ = "Dev"


class menubarListener(ABC):
    """
    Listener doing the connection between the controller and the view for displaying the menubar
    It retrieves the information from the view to send it to the controller.
    """

    # File menu
    @abstractmethod
    def open_fif_file_clicked(self, path_to_file):
        pass

    @abstractmethod
    def open_cnt_file_clicked(self, path_to_file):
        pass

    @abstractmethod
    def open_set_file_clicked(self, path_to_file):
        pass

    @abstractmethod
    def read_events_file_clicked(self, path_to_file):
        pass

    @abstractmethod
    def find_events_from_channel_clicked(self):
        pass

    @abstractmethod
    def export_data_to_csv_file_clicked(self, path_to_file):
        pass

    @abstractmethod
    def export_data_to_set_file_clicked(self, path_to_file):
        pass

    @abstractmethod
    def export_events_to_file_clicked(self):
        pass

    @abstractmethod
    def save_file_clicked(self):
        pass

    @abstractmethod
    def save_file_as_clicked(self):
        pass

    @abstractmethod
    def exit_program_clicked(self):
        pass

    # Edit menu
    @abstractmethod
    def dataset_info_clicked(self):
        pass

    @abstractmethod
    def event_values_clicked(self):
        pass

    @abstractmethod
    def channel_location_clicked(self):
        pass

    @abstractmethod
    def select_data_clicked(self):
        pass

    @abstractmethod
    def select_data_events_clicked(self):
        pass

    # Tools menu
    @abstractmethod
    def filter_clicked(self):
        pass

    @abstractmethod
    def resampling_clicked(self):
        pass

    @abstractmethod
    def re_referencing_clicked(self):
        pass

    @abstractmethod
    def inspect_reject_data_clicked(self):
        pass

    @abstractmethod
    def ica_decomposition_clicked(self):
        pass

    @abstractmethod
    def extract_epochs_clicked(self):
        pass

    @abstractmethod
    def snr_clicked(self):
        pass

    @abstractmethod
    def source_estimation_clicked(self):
        pass

    # Plot menu
    @abstractmethod
    def plot_channel_locations_clicked(self):
        pass

    @abstractmethod
    def plot_data_clicked(self):
        pass

    @abstractmethod
    def plot_topographies_clicked(self):
        pass

    @abstractmethod
    def plot_spectra_maps_clicked(self):
        pass

    @abstractmethod
    def plot_ERP_image_clicked(self):
        pass

    @abstractmethod
    def plot_ERPs_clicked(self):
        pass

    @abstractmethod
    def plot_time_frequency_clicked(self):
        pass

    # Connectivity menu
    @abstractmethod
    def envelope_correlation_clicked(self):
        pass

    @abstractmethod
    def source_space_connectivity_clicked(self):
        pass

    @abstractmethod
    def sensor_space_connectivity_clicked(self):
        pass

    @abstractmethod
    def spectro_temporal_connectivity_clicked(self):
        pass

    # Classification menu
    @abstractmethod
    def classify_clicked(self):
        pass

    # Help menu
    @abstractmethod
    def help_clicked(self):
        pass

    @abstractmethod
    def about_clicked(self):
        pass
