using MainShell.Models;
using MainShell.ParaSetting.Model;

namespace MainShell.ParaSetting.ViewModel
{
    public abstract class ProcessSectionViewModelBase<TParameter> : BaseScreen where TParameter : class
    {
        private TParameter _parameter;

        public TParameter Parameter
        {
            get { return _parameter; }
            private set
            {
                _parameter = value;
                OnPropertyChanged(nameof(Parameter));
            }
        }

        public void SetParameter(TParameter parameter)
        {
            Parameter = parameter;
        }
    }

    public class ProductLoadProcessParameterViewModel : ProcessSectionViewModelBase<ProductLoadProcessParameter>
    {
    }

    public class ProductUnloadProcessParameterViewModel : ProcessSectionViewModelBase<ProductUnloadProcessParameter>
    {
    }

    public class ProductPositionProcessParameterViewModel : ProcessSectionViewModelBase<ProductPositionProcessParameter>
    {
    }

    public class ProductHeightMeasureProcessParameterViewModel : ProcessSectionViewModelBase<ProductHeightMeasureProcessParameter>
    {
    }

    public class WaferLoadProcessParameterViewModel : ProcessSectionViewModelBase<WaferLoadProcessParameter>
    {
    }

    public class WaferUnloadProcessParameterViewModel : ProcessSectionViewModelBase<WaferUnloadProcessParameter>
    {
    }

    public class WaferStraightenProcessParameterViewModel : ProcessSectionViewModelBase<WaferStraightenProcessParameter>
    {
    }

    public class DieRecognizeProcessParameterViewModel : ProcessSectionViewModelBase<DieRecognizeProcessParameter>
    {
    }

    public class BondingProcessParameterViewModel : ProcessSectionViewModelBase<BondingProcessParameter>
    {
    }

    public class RecheckProcessParameterViewModel : ProcessSectionViewModelBase<RecheckProcessParameter>
    {
    }
}