/** \file
 *
 *  Contains the ShortestDistanceToPolygonSidesCalculator class declaration.
 *
 *  ShortestDistanceToPolygonSidesCalculator.h should only be included by ShortestDistanceToPolygonSidesCalculator.cpp
 *  Other classes should include ShortestDistanceToPolygonSidesCalculatorIF.h
 *
 *  Copyright (c) 2022 MBARI
 *  MBARI Proprietary Information.  All Rights Reserved
 */

#ifndef SHORTESTDISTANCETOPOLYGONSIDESCALCULATOR_H_
#define SHORTESTDISTANCETOPOLYGONSIDESCALCULATOR_H_

#include "ShortestDistanceToPolygonSidesCalculatorIF.h"

#include "component/SyncComponent.h"

#define MAX_NUM_VERTICES 10

class ConfigReader;
class UniversalDataReader;
class DataWriter;

/*
 *
 */
class ShortestDistanceToPolygonSidesCalculator : public SyncDerivationComponent
{
public:
    ShortestDistanceToPolygonSidesCalculator( const Module* module );
    virtual ~ShortestDistanceToPolygonSidesCalculator();

    /// Initialize function
    void initialize( void );

    /// The actual "payload" of the component
    void run( void );

private:

    void readConfig( void );
    bool calculate( void );
    void writeData( void );

    int verbosity_, sideShortestDist_;
    bool insidePolygon_;
    Timestamp dataTimestamp_;

    double latVertex_[MAX_NUM_VERTICES];
    double lonVertex_[MAX_NUM_VERTICES];
    double shortestDistToPolygonSides_;

    UniversalDataReader* latitudeReader_;
    UniversalDataReader* longitudeReader_;

    DataWriter* shortestDistToPolygonSidesWriter_;
    DataWriter* sideShortestDistWriter_;
    DataWriter* insidePolygonWriter_;

    ConfigReader* verbosityCfgReader_;
    ConfigReader* latVertex1CfgReader_;
    ConfigReader* lonVertex1CfgReader_;
    ConfigReader* latVertex2CfgReader_;
    ConfigReader* lonVertex2CfgReader_;
    ConfigReader* latVertex3CfgReader_;
    ConfigReader* lonVertex3CfgReader_;
    ConfigReader* latVertex4CfgReader_;
    ConfigReader* lonVertex4CfgReader_;
    ConfigReader* latVertex5CfgReader_;
    ConfigReader* lonVertex5CfgReader_;
    ConfigReader* latVertex6CfgReader_;
    ConfigReader* lonVertex6CfgReader_;
    ConfigReader* latVertex7CfgReader_;
    ConfigReader* lonVertex7CfgReader_;
    ConfigReader* latVertex8CfgReader_;
    ConfigReader* lonVertex8CfgReader_;
    ConfigReader* latVertex9CfgReader_;
    ConfigReader* lonVertex9CfgReader_;
    ConfigReader* latVertex10CfgReader_;
    ConfigReader* lonVertex10CfgReader_;
};

#endif /*SHORTESTDISTANCETOPOLYGONSIDESCALCULATOR_H_*/
