// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only

#include "dynamicsplinewidget.h"

#include <QChart>
#include <QChartView>
#include <QRandomGenerator>
#include <QSplineSeries>
#include <QValueAxis>

DynamicSplineWidget::DynamicSplineWidget(QWidget *parent)
    : ContentWidget(parent)
{
    auto chart = new QChart;
    chart->setTitle("Dynamic Spline Chart");
    chart->legend()->hide();
    chart->setAnimationOptions(QChart::AllAnimations);

    m_axisX = new QValueAxis;
    m_axisY = new QValueAxis;

    QObject::connect(&m_timer, &QTimer::timeout, this, &DynamicSplineWidget::handleTimeout);
    m_timer.setInterval(1000);

    m_series = new QSplineSeries;
    QPen green(Qt::red);
    green.setWidth(3);
    m_series->setPen(green);
    m_series->append(m_x, m_y);

    chart->addSeries(m_series);

    chart->addAxis(m_axisX,Qt::AlignBottom);
    chart->addAxis(m_axisY,Qt::AlignLeft);
    m_series->attachAxis(m_axisX);
    m_series->attachAxis(m_axisY);
    m_axisX->setTickCount(5);
    m_axisX->setRange(0, 10);
    m_axisY->setRange(-5, 10);

    createDefaultChartView(chart);

    m_timer.start();
}

void DynamicSplineWidget::handleTimeout()
{
    qreal x = defaultChartView()->chart()->plotArea().width() / m_axisX->tickCount();
    qreal y = (m_axisX->max() - m_axisX->min()) / m_axisX->tickCount();
    m_x += y;
    m_y = QRandomGenerator::global()->bounded(5) - 2.5;
    m_series->append(m_x, m_y);
    defaultChartView()->chart()->scroll(x, 0);
    if (m_x >= 100)
        m_timer.stop();
}
