using System;
using System.Runtime.InteropServices;
using Decal.Interop.Filters;

namespace Decal.Adapter.Wrappers;

[CLSCompliant(true)]
public class SkillInfoWrapper : MarshalByRefObject, IDisposable
{
	private SkillInfo mySkillInfo;

	private TrainingType myTraining;

	private bool isDisposed;

	public int Base => mySkillInfo.Base;

	public int Bonus => mySkillInfo.Bonus;

	public int Buffed => mySkillInfo.Buffed;

	public int Current => mySkillInfo.Current;

	public int XP => mySkillInfo.Exp;

	public string Formula => mySkillInfo.Formula;

	public int Increment => mySkillInfo.Increment;

	public bool Known => mySkillInfo.Known;

	public string Name => mySkillInfo.Name;

	public string ShortName => mySkillInfo.ShortName;

	public TrainingType Training => myTraining;

	internal SkillInfoWrapper(SkillInfo info)
	{
		mySkillInfo = info;
		switch (info.Training)
		{
		case eTrainingType.eTrainUnusable:
			myTraining = TrainingType.Unusable;
			break;
		case eTrainingType.eTrainUntrained:
			myTraining = TrainingType.Untrained;
			break;
		case eTrainingType.eTrainTrained:
			myTraining = TrainingType.Trained;
			break;
		case eTrainingType.eTrainSpecialized:
			myTraining = TrainingType.Specialized;
			break;
		default:
			myTraining = TrainingType.Unusable;
			break;
		}
	}

	~SkillInfoWrapper()
	{
		Dispose(disposing: false);
	}

	public void Dispose()
	{
		Dispose(disposing: true);
		GC.SuppressFinalize(this);
	}

	protected virtual void Dispose(bool disposing)
	{
		if (!isDisposed)
		{
		}
		if (mySkillInfo != null)
		{
			Marshal.ReleaseComObject(mySkillInfo);
		}
		isDisposed = true;
	}

	protected void EnforceDisposedOnce()
	{
		if (isDisposed)
		{
			throw new ObjectDisposedException("SkillInfoWrapper");
		}
	}
}
