#ifndef INFORMATIONSCREENOPTIONS_H
#define INFORMATIONSCREENOPTIONS_H

#include <View/view.h>

namespace Ui {
class InformationScreenOptions;
}

/*!
 * \brief The InformationScreenOptions class.
 */
class InformationScreenOptions : public View
{
    Q_OBJECT

public:

    /*!
     * \brief InformationScreenOptions constructor.
     * \param hasIcons Whether the information screen has icons.
     * \param parent Information Screen parent widget.
     */
    explicit InformationScreenOptions( bool hasIcons, QWidget *parent = 0);
    ~InformationScreenOptions();

    /*!
     * \brief showError Show an error message.
     * \param error Message to show.
     */
    void showError(QString error);

    /*!
     * \brief showSuccess Show a success message.
     * \param success Message to show.
     */
    void showSuccess(QString success);

    /*!
      * \brief showInfo Show an information message.
      * \param info Message to show.
      */
     void showInfo(QString info);

     /*!
     * \brief setController Sets the information screen controller.
     * \param controller Information screen controller.
     */
    void setController(Controller *controller);

    /*!
     * \brief getCardTitle Returns the card title.
     * \return Card title.
     */
    QString getCardTitle();

    /*!
     * \brief getPropertyName Returns the property name.
     * \return Property name.
     */
    QString getPropertyName();

    /*!
     * \brief getPropertyValue Returns the property value.
     * \return Property value.
     */
    QString getPropertyValue();

    /*!
     * \brief addProperty Adds property to the properties list.
     * \param name Name of the property.
     */
    void addProperty(QString name);

    /*!
     * \brief showProperty Shows the name and the value of the property.
     * \param property Property to show.
     */
    void showProperty(QStringList property);

    /*!
     * \brief getCurrentIndexProperty Returns the index of the current property.
     * \return Property index.
     */
    int getCurrentIndexProperty();

    /*!
     * \brief updatePropertyList Updates the property list.
     * \param isChange Whether the property has been changed.
     * \param index Property index.
     * \param property Property.
     */
    void updatePropertyList(bool isChange, int index, QString property);

    /*!
     * \brief setProgress Updates progress bar.
     * \param progress Progress value.
     */
    void setProgress(int progress);    

    /*!
     * \brief getCardImage Returns card image path.
     * \return Image path.
     */
    QString getCardImage();

    /*!
     * \brief disableAddBtn Disables add property button.
     */
    void disableAddBtn();

    /*!
     * \brief isPropertyFill Checks if the property has name and value fields.
     */
    void isPropertyFill();

    /*!
     * \brief clearPropertyInput Clears property name and property value inputs.
     */
    void clearPropertyInput();

    /*!
     * \brief clear Clears all of the inputs of the information screen.
     */
    void clear();

    /*!
     * \brief setCardTitle Sets the card title.
     * \param title Card title.
     */
    void setCardTitle(QString title);

    /*!
     * \brief setCardImage Sets the card image.
     * \param path Image path.
     */
    void setCardImage(QString path);

private slots:

    /*!
     * \brief on_helpBtn_clicked This slot is executed when help button is clicked.
     */
    void on_helpBtn_clicked();

    /*!
     * \brief on_homeBtn_clicked This slot is executed when home button is clicked.
     */
    void on_homeBtn_clicked();

    /*!
     * \brief on_settingsBtn_clicked This slot is executed settings help button is clicked.
     */
    void on_settingsBtn_clicked();    

    /*!
     * \brief on_titleInput_textEdited This slot is executed when title input is changed.
     */
    void on_titleInput_textEdited();

    /*!
     * \brief on_propertyInput_textChanged This slot is executed when property name input is changed.
     */
    void on_propertyInput_textChanged( );

    /*!
     * \brief on_valueInput_textChanged This slot is executed when property value input is changed.
     */
    void on_valueInput_textChanged( );

    /*!
     * \brief on_addPropertyBtn_clicked This slot is executed when add property button is clicked.
     */
    void on_addPropertyBtn_clicked();

    /*!
     * \brief on_removePropertyBtn_clicked This slot is executed when remove property button is clicked.
     */
    void on_removePropertyBtn_clicked();    

    /*!
     * \brief on_editPropertyBtn_clicked This slot is executed when edit property button is clicked.
     */
    void on_editPropertyBtn_clicked();

    /*!
     * \brief on_propertiesList_itemClicked This slot is executed when property item is clicked.
     */
    void on_propertiesList_itemClicked();

    /*!
     * \brief on_continueBtn_clicked This slot is executed when continue button is clicked.
     */
    void on_continueBtn_clicked();

    /*!
     * \brief on_browseBtn_clicked This slot is executed when browse button is clicked.
     */
    void on_browseBtn_clicked();

    /*!
     * \brief on_hpIconBtn_clicked This slot is executed when back button is clicked.
     */
    void on_hpIconBtn_clicked();

private:

    /*!
     * \brief initElements Initialices the elements.
     */
    void initElements();

    /*!
     * \brief setValidators Sets the input validators.
     */
    void setValidators();

    /*!
     * \brief isFullFill Checks if all of the elements have a value.
     */
    void isFullFill();

    /*!
     * \brief hideIconElements Hides icon elements.
     */
    void hideIconElements();

    /*!
     * \brief showPropertyOptions Shows property options.
     */
    void showPropertyOptions();

    /*!
     * \brief setToolTips Sets buttons help.
     */
    void setToolTips();

    /*!
     * \brief setIconImage Set icon image.
     * \param path Image path.
     */
    void setIconImage(QString path);    

private:

    /*!
     * \brief ui
     */
    Ui::InformationScreenOptions *ui;

};

#endif // INFORMATIONSCREENOPTIONS_H
