using System.Windows;
using System.Windows.Input;
using HandyControl.Controls;
using SparkClient.Model.Helper;
using SparkClient.ViewModel.Grading;
using MessageBox = SparkClient.Views.Dialog.MessageBox;
namespace SparkClient.ViewModel.BaseWindow;

public class BaseControlVM : BaseViewModel
{
    string _windowTitle;

    private Visibility _showFunctionButton;
    private string _functionButtonIcon;
    
    private Object _viewContent;
    
    public string WindowTitle { get { return _windowTitle;  } set { _windowTitle = value; OnPropertyChanged("WindowTitle");  } }
    public Visibility ShowFunctionButton { get { return _showFunctionButton;  } set { _showFunctionButton = value; OnPropertyChanged("ShowFunctionButton");  } }
    public string FunctionButtonIcon { get { return _functionButtonIcon;  } set { _functionButtonIcon = value; OnPropertyChanged("FunctionButtonIcon");  } }
    public Object ViewControl { get { return _viewContent;  } set { _viewContent = value; OnPropertyChanged("ViewControl");  } }
    
    public object Content { get; }
    public ICommand CloseCommand { get; }
    /// <summary>
    /// 构造:创建一个带有子页面的模板,并指定子窗口标题,并指定右侧按钮事件内容
    /// </summary>
    /// <param name="vm">子页面</param>
    /// <param name="windowTitle">子窗口标题</param>
    /// <param name="Function">事件内哦那个</param>
    public BaseControlVM(BaseViewModel vm, string windowTitle, ICommand Function)
    {
        Content = vm;
        WindowTitle = windowTitle;
        CloseCommand = new RelayCommand(CloseVM);
    }

    /// <summary>
    /// 构造:创建一个带有子页面的模板,并指定子窗口标题
    /// </summary>
    /// <param name="vm">子页面</param>
    /// <param name="windowTitle">子窗口标题</param>
    public BaseControlVM(BaseViewModel vm, string windowTitle)
    {
        Content = vm;
        WindowTitle = windowTitle;
        CloseCommand = new RelayCommand(CloseVM);
    }
    /// <summary>
    /// 构造:创建一个带有子页面的模板
    /// </summary>
    /// <param name="vm"></param>
    public BaseControlVM(BaseViewModel vm)
    {
        Content = vm;
        CloseCommand = new RelayCommand(CloseVM);
    }
    
    /// <summary>
    /// 关闭并退回至上一个页面
    /// </summary>
    /// <param name="parameter"></param>
    public void CloseVM(object parameter)
    {
        if(Content is GradingResultVM)
        {
            bool isSaved = (Content as GradingResultVM).isSaved;
            if (isSaved) {
                WindowManager.mainViewModel.Content = WindowManager.PreviousVM();
            } 
            else { 
                MessageBox message = new MessageBox();
                MessageBoxResult result = message.ShowAsk(MultilingualHelper.getString("DiamodResultCloseConfirm"));
                if (MessageBoxResult.OK.Equals(result))
                {
                    WindowManager.mainViewModel.Content = WindowManager.PreviousVM();
                }
            }
        }
        else
        {
            WindowManager.mainViewModel.Content = WindowManager.PreviousVM();
        }
        
    }

}