using System;
using System.IO;
using System.Threading.Tasks;
using DevExpress.Export;
using DevExpress.Mobile.Core;
using DevExpress.Mobile.IO;
using Xamarin.Forms;
using System.Reflection;

namespace DevExpress.GridDemo {
    public partial class SaveLoadStatePage {
        public SaveLoadStatePage() {
            InitializeComponent();
            cbStateList.Items.Add("Default");
            cbStateList.Items.Add("Compact");
            cbStateList.Items.Add("Grouped");
            cbStateList.SelectedIndex = 0;
            //cbStateList.SelectedIndexChanged += cbStateList_SelectedIndexChanged;
            BindData();
        }

        void OnStateIndexChanged(object sender, EventArgs e) {
            //throw new NotImplementedException();
            LoadState(cbStateList.Items[cbStateList.SelectedIndex]);
        }
        async void BindData() {
            MainPageViewModel model = await LoadData();
            BindingContext = model;
        }
        Task<MainPageViewModel> LoadData() {
            return Task<MainPageViewModel>.Run(() => new MainPageViewModel(new DemoOrdersRepository()));
        }

        string customState = String.Empty;
        void OnSave(object sender, EventArgs e) {
            customState = grid.SaveLayoutToXml();
            if (!cbStateList.Items.Contains("Custom"))
                cbStateList.Items.Add("Custom");
        }
        void LoadState(string name) {
            if (name == "Custom" && !String.IsNullOrEmpty(customState))
                grid.RestoreLayoutFromXml(customState);
            else {
                string resourceName = "DevExpress.GridDemo." + name.ToLower() + "_state.xml";
                Stream stream = GetType().GetTypeInfo().Assembly.GetManifestResourceStream(resourceName);
                grid.RestoreLayoutFromStream(stream);
            }
        }
    }
}