/*     INFINITY CODE 2013-2019      */
/*   http://www.infinity-code.com   */

using System;
using InfinityCode.RealWorldTerrain.Generators;
using InfinityCode.RealWorldTerrain.Windows;
using UnityEngine;

namespace InfinityCode.RealWorldTerrain.Phases
{
    public class RealWorldTerrainLoadHeightmapPhase : RealWorldTerrainPhase
    {
        public override string title
        {
            get { return "Load Elevations..."; }
        }

        public override void Enter()
        {
            try
            {
                if (prefs.elevationProvider == RealWorldTerrainElevationProvider.SRTM)
                {
                    for (index = 0; index < RealWorldTerrainElevationGenerator.elevations.Count; index++)
                    {
                        RealWorldTerrainElevationGenerator activeElevation = RealWorldTerrainElevationGenerator.elevations[index];
                        ((RealWorldTerrainSRTMElevationGenerator)activeElevation).ParseHeightmap();
                        if (!isCapturing) return;
                    }
                }
                else if (prefs.elevationProvider == RealWorldTerrainElevationProvider.BingMaps)
                {
                    if (!RealWorldTerrainBingElevationGenerator.Load())
                    {
                        RealWorldTerrainWindow.CancelCapture();
                        Debug.LogError("Cannot load elevation map");
                        return;
                    }
                }
                else if (prefs.elevationProvider == RealWorldTerrainElevationProvider.ArcGIS)
                {
                    if (!RealWorldTerrainArcGISElevationGenerator.Load())
                    {
                        RealWorldTerrainWindow.CancelCapture();
                        Debug.LogError("Cannot load elevation map");
                        return;
                    }
                }
                else if (prefs.elevationProvider == RealWorldTerrainElevationProvider.Mapbox)
                {
                    if (!RealWorldTerrainMapboxElevationGenerator.Load())
                    {
                        RealWorldTerrainWindow.CancelCapture();
                        Debug.LogError("Cannot load elevation map");
                        return;
                    }
                }
                else if (prefs.elevationProvider == RealWorldTerrainElevationProvider.SRTM30)
                {
                    for (index = 0; index < RealWorldTerrainElevationGenerator.elevations.Count; index++)
                    {
                        RealWorldTerrainElevationGenerator activeElevation = RealWorldTerrainElevationGenerator.elevations[index];
                        ((RealWorldTerrainSRTM30ElevationGenerator)activeElevation).ParseHeightmap();
                        if (!isCapturing) return;
                    }
                }

                Complete();
            }
            catch (Exception exception)
            {
                Debug.LogException(exception);
                RealWorldTerrainWindow.CancelCapture();
            }
        }
    }
}