using FLY.Thick.Base.Client;
using FLY.Thick.Base.Common;
using FLY.Thick.Base.IService;
using MultiLayout.UiModule;
using FObjBase;
using LiveCharts;
using Misc;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using FLY.Thick.Base.UI;
using Unity;
using Microsoft.Win32;

namespace FLY.Thick.Base.UI.UiModule
{
    /// <summary>
    /// FixGraph.xaml 的交互逻辑
    /// </summary>
    public partial class FixGraph : UserControl
    {
        FixGraphVm viewModel;
        FixGraphItemParam graphparam;
        public FixGraph()
        {
            InitializeComponent();
        }
        [InjectionMethod]
        public void Init(int id, IUnityContainer container, 
            IFixService fixService, ITDGageService gageService)
        {
            //查找参数
            graphparam = FixGraphParams.Current.Items.Find(p => p.ID == id);
            if (graphparam == null)
            {
                graphparam = new FixGraphItemParam() { ID = id };
                FixGraphParams.Current.Items.Add(graphparam);
                FixGraphParams.Current.Save();
            }

            //获取设备
            viewModel = new FixGraphVm();
            viewModel.Init(fixService, gageService.DynArea, graphparam);

            this.DataContext = viewModel;
        }

        private void Button_info_click(object sender, RoutedEventArgs e)
        {
            bool isPaused = viewModel.IsPaused;
            if (!isPaused)
                viewModel.IsPaused = true;
            FixGraphConfig w = new FixGraphConfig();
            w.Init(graphparam);
            w.Owner = FLY.ControlLibrary.COMMON.GetWindow(this);
            w.ShowDialog();
            viewModel.IsPaused = isPaused;
        }

        private void button_pause_Click(object sender, RoutedEventArgs e)
         {
            viewModel.IsPaused = !viewModel.IsPaused;
        }

        private void button_save_Click(object sender, RoutedEventArgs e)
        {
            viewModel.PreSave();
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.FileName = viewModel.SavePath;
            if (sfd.ShowDialog() == true) 
            {
                viewModel.SavePath = sfd.FileName;
                viewModel.Save((asyncContext, retData) =>
                {
                    this.Dispatcher.Invoke(() =>
                    {
                        bool ret = (bool)retData;
                        if (ret)
                        {
                            MessageBox.Show($"导出成功! {viewModel.SavePath }");
                        }
                        else 
                        {
                            MessageBox.Show($"导出失败!");
                        }
                    });
                }, null);
            }
        }

        private void button_analyze_Click(object sender, RoutedEventArgs e)
        {
            viewModel.GetDatas(out double intervalms, out List<double> datas);
            PgFixAnalyze p = new PgFixAnalyze();
            p.Init(intervalms, datas);
            MultiLayout.FlyLayoutManager.NavigationService.Navigate(p);
        }
    }










}