using agxIO;
using AGXUnity.IO.OpenPLX;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using UnityEditor;
using UnityEngine;

[InitializeOnLoad]
public class SetupOpenPLXEnvironment
{
  static SetupOpenPLXEnvironment()
  {
    var tutorialRoot = System.IO.Path.GetDirectoryName(System.IO.Path.GetDirectoryName(GetScriptPath()));
    var dataPath = tutorialRoot + System.IO.Path.DirectorySeparatorChar + "data";
    agxIOSWIG.setEnvironmentVariable( "AGX_DATA_DIR", dataPath );
    Debug.Log( $"Setting AGX_DATA_DIR to '{dataPath}'" );

    var models = new List<string>()
    {
      "BoxTruck",
      "TrafficCone",
      "VehicleWithSteering"
    };

    foreach ( var model in models ) {
      var modelPath = tutorialRoot +
        System.IO.Path.DirectorySeparatorChar + "models" +
        System.IO.Path.DirectorySeparatorChar + model;

      if ( !OpenPLXSettings.Instance.AdditionalBundleDirs.Contains( modelPath ) ) {
        Debug.Log( $"Model '{model}' is not added to Additional bundle dirs, adding '{modelPath}'" );
        OpenPLXSettings.Instance.AdditionalBundleDirs.Add( modelPath );
        OpenPLXSettings.Instance.Save();
      }
    }

    var hmBundle = tutorialRoot +
        System.IO.Path.DirectorySeparatorChar + "Tutorials" +
        System.IO.Path.DirectorySeparatorChar + "advanced" +
        System.IO.Path.DirectorySeparatorChar + "ta02-heavy-machine-bundle";
    if ( !OpenPLXSettings.Instance.AdditionalBundleDirs.Contains( hmBundle ) ) {
      Debug.Log( $"Heavy machine bundle is not added to Additional bundle dirs, adding '{hmBundle}'" );
      OpenPLXSettings.Instance.AdditionalBundleDirs.Add( hmBundle );
      OpenPLXSettings.Instance.Save();
    }
  }

  static string GetScriptPath( [CallerFilePath] string path = null ) => path;
}
