using System.Collections;
using System.Collections.Generic;
using Godot;
using System;

using System.Threading.Tasks;

namespace Rokojori
{
  public abstract class MultiBakeModeBillboardBase:MultiBakeModeImplementation
  {
    public override void CreateMaterial( bool preview )
    {
      var mb = multiBaker;

      var material = new StandardMaterial3D();
      
      material.ShadingMode = preview ? BaseMaterial3D.ShadingModeEnum.Unshaded : BaseMaterial3D.ShadingModeEnum.PerPixel;
      material.Transparency = BaseMaterial3D.TransparencyEnum.AlphaScissor;
      material.AlphaScissorThreshold = 0.5f;
      material.AlphaAntialiasingMode = BaseMaterial3D.AlphaAntiAliasing.AlphaToCoverageAndToOne;
      material.AlphaAntialiasingEdge = 0.3f;
      material.NormalEnabled = ! preview;

      Materials.Set( mb.X_outputMesh, material );   
    }

    public override void AssignMaterial( BakingMaterialMode mode, Texture2D texture )
    {
      var mb = multiBaker;
      mb.CacheTexture( mode, texture );
      
      var material = Materials.Get<StandardMaterial3D>( mb.X_outputMesh );


      if ( BakingMaterialMode.Albedo == mode || BakingMaterialMode.Preview == mode )  
      {
        RJLog.Log( "Assign albedo" );
        material.AlbedoTexture = texture;        
      } 
      else if ( BakingMaterialMode.Normals == mode )
      {
        RJLog.Log( "Assign normal" );
        material.NormalTexture = texture;
      }
      else if ( BakingMaterialMode.ORM == mode )
      {
        material.OrmTexture = texture;
      }

    }
  }
}