/***
   This file is part of fly-ocr.

   Copyright (C) 2016-2020 Sandro Mani <manisandro@gmail.com>
   Copyright (C) 2021 LLC "RusBITech-Astra" (https://astralinux.ru)

    Based on gImageReader source code by Sandro Mani under the GNU
    General Public License (GPL) version 3 or later

   Foobar is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.

   Foobar is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with fly-ocr. If not, see <https://www.gnu.org/licenses/>.
***/

#ifndef DISPLAYERTOOLHOCR_H
#define DISPLAYERTOOLHOCR_H

#include "displayer.h"

class DisplayerToolHOCR : public DisplayerTool
{
    Q_OBJECT
public:
    enum Action {ACTION_NONE, ACTION_DRAW_GRAPHIC_RECT, ACTION_DRAW_CAREA_RECT, ACTION_DRAW_PAR_RECT, ACTION_DRAW_LINE_RECT, ACTION_DRAW_WORD_RECT};

    DisplayerToolHOCR(Displayer* displayer, QObject* parent = nullptr);
    ~DisplayerToolHOCR();

    QList<QImage> getOCRAreas() override;
    void pageChanged() override
    {
        emit displayedSourceChanged();
        reset();
    }
    void resolutionChanged(double /*factor*/) override
    {
        reset();
    }
    void rotationChanged(double /*delta*/) override
    {
        reset();
    }
    void reset() override
    {
        setAction(ACTION_NONE, true);
    }

    void mousePressEvent(QMouseEvent* event) override;
    void mouseMoveEvent(QMouseEvent* event) override;
    void mouseReleaseEvent(QMouseEvent* event) override;

    void setAction(Action action, bool clearSel = true);
    void setSelection(const QRect& rect, const QRect& minRect);
    QImage getSelection(const QRect& rect) const;
    void clearSelection();

signals:
    void displayedSourceChanged();
    void bboxDrawn(QRect rect, int action);
    void bboxChanged(QRect rect);
    void positionPicked(QPoint pos);
    void actionChanged(int action);

private:
    DisplayerSelection* m_selection = nullptr;
    Action m_currentAction = ACTION_NONE;
    bool m_pressed = false;

private slots:
    void selectionChanged(QRectF rect);
};

#endif // DISPLAYERTOOLHOCR_H
