#ifndef LAYER_H
#define LAYER_H

#include "main.h"

#define HandleSize 10
class OutputView;

class Layer : public QWidget {
    Q_OBJECT
public:
    explicit Layer(int idx, const QString &name, QWidget *parent = 0) : QWidget(parent), idx(idx), name(name) {}
    inline void updateGeo() {
        setGeometry(QRect(sPos*gScale+gOrigin, sSize*gScale));
    }
    void select();

    QPoint sPos;
    QSize sSize{1920, 1080};
    int idx = 1, rowIdx = 0;
    QString name;
    TreeWidgetItem *item = 0;
    OutputView *view = 0;

protected:
    void paintEvent(QPaintEvent *) override;
    void mousePressEvent(QMouseEvent *) override;
    void mouseReleaseEvent(QMouseEvent *) override;
    void mouseMoveEvent(QMouseEvent *) override;
    void leaveEvent(QEvent *) override;
    void resizeEvent(QResizeEvent *event) override {
        hdlT  = QRectF(width()/2 - HandleSize/2, -HandleSize/2, HandleSize, HandleSize);
        hdlRT = QRectF(width() - HandleSize/2, - HandleSize/2, HandleSize, HandleSize);
        hdlL  = QRectF(-HandleSize/2, height()/2 - HandleSize/2, HandleSize, HandleSize);
        hdlR  = QRectF(width() - HandleSize/2, height()/2 - HandleSize/2, HandleSize, HandleSize);
        hdlLB = QRectF(-HandleSize/2, height() - HandleSize/2, HandleSize, HandleSize);
        hdlB  = QRectF(width()/2 - HandleSize/2, height() - HandleSize/2, HandleSize, HandleSize);
        hdlRB = QRectF(width() - HandleSize/2, height() - HandleSize/2, HandleSize, HandleSize);
    }

    void setFrmSec(const QPointF &);
    void setFrmSecIfNeed(Qt::WindowFrameSection frmSec, Qt::CursorShape cursor);
    void clearSnap();

    QRectF hdlLT = QRectF(-HandleSize/2, -HandleSize/2, HandleSize, HandleSize), hdlT, hdlRT, hdlL, hdlR, hdlLB, hdlB, hdlRB;
    QPointF mPressRel{FLT_MAX, FLT_MAX};
    Qt::WindowFrameSection mFrmSec = Qt::NoSection;
    char snapLR = 0, snapTB = 0;
};


class OutputView : public QGraphicsView {
    Q_OBJECT
public:
    explicit OutputView(QWidget *parent = 0);

protected:
    void mousePressEvent(QMouseEvent *) override;
    void mouseReleaseEvent(QMouseEvent *) override;
    void mouseMoveEvent(QMouseEvent *) override;
    void leaveEvent(QEvent *) override;
    void clearSnap();

    QPointF mPressRel{FLT_MAX, FLT_MAX};
    char snapLR = 0, snapTB = 0;
};

#endif // LAYER_H