#pragma once
#include "timapprovider.h"

class TiEsriMapProvider : public TiMapProvider
{
    Q_OBJECT
public:
    TiEsriMapProvider(const quint32 averageSize, const QGeoMapType::MapStyle mapType,
                      QObject* parent = nullptr);
    QNetworkRequest getTileURL(const int x, const int y, const int zoom,
                               QNetworkAccessManager* networkManager) override;
};

class TiEsriWorldStreetMapProvider : public TiEsriMapProvider
{
    Q_OBJECT

public:
    TiEsriWorldStreetMapProvider(QObject* parent = nullptr) :
        TiEsriMapProvider(AVERAGE_TILE_SIZE, QGeoMapType::StreetMap, parent)
    {
    }

    QString getURL(const int x, const int y, const int zoom,
                   QNetworkAccessManager* networkManager) override;
};

class TiEsriWorldSatelliteMapProvider : public TiEsriMapProvider
{
    Q_OBJECT

public:
    TiEsriWorldSatelliteMapProvider(QObject* parent = nullptr) :
        TiEsriMapProvider(AVERAGE_TILE_SIZE, QGeoMapType::SatelliteMapDay, parent)
    {
    }

    QString getURL(const int x, const int y, const int zoom,
                   QNetworkAccessManager* networkManager) override;
};

class TiEsriTerrainMapProvider : public TiEsriMapProvider
{
    Q_OBJECT

public:
    TiEsriTerrainMapProvider(QObject* parent = nullptr) :
        TiEsriMapProvider(AVERAGE_TILE_SIZE, QGeoMapType::TerrainMap, parent)
    {
    }

    QString getURL(const int x, const int y, const int zoom,
                   QNetworkAccessManager* networkManager) override;
};