#ifndef TCPC_DEFS_H
#define TCPC_DEFS_H

#pragma once
#include <opencv2/opencv.hpp>
#include <libs/robot/robot_defs.h>
#include <libs/camera_calibration/camera_calibration.h>

namespace tcpc{

struct sThresholds{
    uint16_t Low = 0;
    uint16_t High = 0;
};//sThresholds

struct sBoundaries{
    uint8_t Upper = 0, Lower = 0;
};//sBoundaries

struct  sCV_parameters{
    sThresholds Canny_threshold;
    uint8_t Blur_kernel = 0;
    uint8_t Dilate_thickness = 0;
};//sCV_parameters

struct sHSV_components{
    sBoundaries Hue, Saturation, Value;
};//sHSV_components

struct sHSV_boundaries{
    sHSV_components front, side;
};//sHSV_boundaries

struct sHSV_Mat_Pattern{
    cv::Mat front, side;
};//sHSV_Mat_Pattern

struct sRobot_interface{
    std::string type = "Staubli", ipv4_Address = "";
    uint16_t port = 0;
    ri::Point default_position;

};//sRobot_interface

struct sCamera_Robot_parameters{
    cv::Point3d coordinates_offset;
    ri::Point position;
};//sCamera_Robot_parameters

struct sTCPC{
    double precision_px = 10;
    uint8_t MAX_FINDING_ITER = 20;
    std::vector<std::vector<float>> default_tcpc_positions;
    calibration::_Point calibration_Point;
    ri::Point default_gripper;
};//sTCPC

struct sParameters{
    sCV_parameters cv;
    sHSV_boundaries HSV_filter;
    sRobot_interface Robot;
    sCamera_Robot_parameters camera_robot;
    calibration::stereo_camera stereo_camera;
    sTCPC tcpc;
};//sParameters

struct sCAM_Parameters{
    double exposure = 0;
    std::string serial = "NONE";
    std::string idPf = "NONE";
    std::string xmlPath = "NONE";
};//sCAM_Parameters

};//end_namespace_tcpc
#endif // TCPC_DEFS_H
 
