#ifndef CAMERASETUP_H
#define CAMERASETUP_H

#include <QWidget>
#include "camerapreview.h"
#include "mylogger.h"


namespace Ui {
    class SingleCamera;
}


class CameraSetup : public QWidget {
    Q_OBJECT

public:
    CameraSetup(QWidget *parent=0): QWidget(parent){};
    // virtual ROI getRoi() = 0;
    virtual CameraLayout cameraLayout() = 0;
    virtual void setPrimaryCamera(QString &device) = 0;
    virtual void setSecondaryCamera(QString &device) = 0;
    virtual void switchArrangement() = 0;
};


class SingleCamera : public CameraSetup {
    Q_OBJECT

public:
    explicit SingleCamera(QWidget *parent = 0);
    ~SingleCamera();


    void setPrimaryCamera(QString &devive) {
        qDebug() << "Update primary camera";
        camera1Preview->setCamera(devive);
    }


    void setSecondaryCamera(QString &devive) {
        qDebug()<< "Update secondary camera not supported on SingleCamera";
    }

    CameraLayout cameraLayout();

    void switchArrangement() {
        qDebug() << "switch orientation does nothing on SingleCamera";
    }

private:
    CameraPreview *camera1Preview;
};


class DualCamera : public CameraSetup {
    Q_OBJECT

public:
    explicit DualCamera(QWidget *parent = 0);
    ~DualCamera();


    void setPrimaryCamera(QString &device) {
        qDebug() << "Update primary camera";
        if (camera1Preview != nullptr) {
            camera1Preview->setCamera(device);
            primary_device = device;
        }
    }


    void setSecondaryCamera(QString &device) {
        qDebug()<< "Update secondary camera";
        if (camera2Preview != nullptr) {
            camera2Preview->setCamera(device);
        }
    }

    CameraLayout cameraLayout();
    void switchArrangement();


public slots:
    void updateROI1(int x, int y, int width, int height);
    void updateROI2(int x, int y, int width, int height);

private:
    QString primary_device;
    CameraPreview *camera1Preview;
    CameraPreview *camera2Preview;
};

#endif //CAMERASETUP_H