#pragma once

#include "fgc/ICameraSource.h"

#include <memory>
#include <string>
#include <vector>

namespace fgc {

// Real camera source backed by the Allied Vision Vimba X SDK (VmbCPP). Opens
// cameras by ID, runs continuous acquisition with a settle-then-keep frame
// observer, and delivers completed frames to the callback. The encode/save
// step lives in ImagePipeline, so this class only produces Frames.
class VimbaCameraSource : public ICameraSource {
public:
    explicit VimbaCameraSource(std::vector<std::string> camera_ids);
    ~VimbaCameraSource() override;

    void open() override;
    void close() override;
    void start() override;
    void stop() override;
    bool trigger() override;
    bool setFrameRate(double fps) override;
    void setFrameCallback(FrameCallback cb) override;
    int  cameraCount() const override;

private:
    struct Impl;
    std::unique_ptr<Impl> impl_;
};

}  // namespace fgc
