using Common.Library;
using Gready_Poang.EntityLayer;
using Gready_Poang.Services;
using Gready_Poang.ViewModelLayer;
using System.Windows.Input;


namespace Gready_Poang.CommandClasses;

public class ParticipantViewModelCommands : ParticipantViewModel
{
    #region constructors
    public ParticipantViewModelCommands() : base()
    {
    }

    public ParticipantViewModelCommands(
        IRepository<Participant> repo,
        IMethodSharingService<Participant> sharingService,
        AppShellViewModel appShell,
        IObjectMessageService objectMessage) : base(repo, sharingService, appShell, objectMessage)
    {
    }

    #endregion

    #region Private Variables
    private bool _IsSaveCommandEnabled = true;
    #endregion

    #region Public Properties
    public bool IsSaveCommandEnabled
    {
        get { return _IsSaveCommandEnabled; }
        set
        {
            _IsSaveCommandEnabled = value;
            RaisePropertyChanged(nameof(IsSaveCommandEnabled));
        }
    }
    #endregion

    #region Commands
    public ICommand SaveCommand { get; private set; }
    public ICommand EditCommand { get; private set; }
    #endregion

    #region Init Method
    public override void Init()
    {
        base.Init();
        SaveCommand = new Command(async () => SaveAsync(), () => IsSaveCommandEnabled);
        EditCommand = new Command<int>(async (id) => await EditAsync(id), (id) => id > 0);
    }
    #endregion

    protected async Task EditAsync(int id)
    {
        await Shell.Current.GoToAsync($"{nameof(Views.ParticipantListView)}?id={id}");
    }

    public async Task<bool> SaveAsync()
    {
        var ret = base.Save();
        if (ret)
        {
            await Shell.Current.GoToAsync("..");
        }

        return ret;
    }
}
