// -*- Mode: C++ -*-
#ifndef ASTRO_H
#define ASTRO_H

#include <QWidget>
#include "Radio.hpp"

class QSettings;
class Configuration;
namespace Ui {
  class Astro;
}

class Astro final
  : public QWidget
{
  Q_OBJECT;

  using Frequency = Radio::Frequency;
  using FrequencyDelta = Radio::FrequencyDelta;

public:
  explicit Astro(QSettings * settings, Configuration const *, QWidget * parent = nullptr);
  ~Astro ();
  FrequencyDelta astroUpdate(QDateTime const& t, QString const& mygrid, QString const& hisgrid, Frequency frequency,
                             bool dx_is_self, bool bTx);
  bool doppler_tracking () const;
  Q_SIGNAL void doppler_tracking_toggled (bool);

protected:
  void closeEvent (QCloseEvent *) override;

private slots:
  void on_rbConstFreqOnMoon_clicked();
  void on_rbFullTrack_clicked();
  void on_rbNoDoppler_clicked();
  void on_rb1Hz_clicked();
  void on_rb10Hz_clicked();
  void on_rb100Hz_clicked();
  void on_cbTxAudioTrack_toggled(bool b);
  void on_kHzSpinBox_valueChanged(int n);
  void on_HzSpinBox_valueChanged(int n);

private:
  void read_settings ();
  void write_settings ();

  QSettings * settings_;
  Configuration const * configuration_;
  Ui::Astro * ui_;
  bool m_bRxAudioTrack;
  bool m_bTxAudioTrack;

  qint32 m_DopplerMethod;
  qint32 m_kHz;
  qint32 m_Hz;
  qint32 m_stepHz;
};

extern "C" {
  void astrosub_(int* nyear, int* month, int* nday, double* uth, double* freqMoon,
                 const char* mygrid, const char* hisgrid, double* azsun,
                 double* elsun, double* azmoon, double* elmoon, double* azmoondx,
                 double* elmoondx, int* ntsky, int* ndop, int* ndop00,
                 double* ramoon, double* decmoon, double* dgrd, double* poloffset,
                 double* xnr, double* techo, double* width1, double* width2,
                 bool* bTx, const char* AzElFileName, const char* jpleph,
                 int len1, int len2, int len3, int len4);
}

#endif // ASTRO_H