﻿using CaseOfT.Net.PuttySupportTool.Native;
using CaseOfT.Net.PuttySupportTool.UiItem;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;



namespace CaseOfT.Net.PuttySupportTool.SessionItemViewModels {


    internal class FontUiEditorViewModel : UiEditorViewModelBase {
        public UiItemInfo IsBoldUiItem { get; private set; }
        public UiItemInfo HeightUiItem { get; private set; }
        public UiItemInfo CharSetUiItem { get; private set; }

        public FontUiEditorViewModel(UiItemInfo uiItem, UiItemInfo isBoldUiItem, UiItemInfo heightUiItem, UiItemInfo charSetUiItem) : base(uiItem.ReadOnly) {
            Model = uiItem;
            IsBoldUiItem = isBoldUiItem;
            HeightUiItem = heightUiItem;
            CharSetUiItem = charSetUiItem;

            var height = 1;
            if(heightUiItem != null) {
                int.TryParse(heightUiItem.Text, out height);
            }
            int charset = 0;
            if(charSetUiItem != null) {
                int.TryParse(charSetUiItem.Text, out charset);
            }

            Value = new AbbreviatedFontData(uiItem.Text
                , height
                , (isBoldUiItem != null && isBoldUiItem.Text != "0")
                , charset < 255 ? (byte)charset : (byte)0);
        }

        private AbbreviatedFontData value;

        public AbbreviatedFontData Value {
            get {
                return value;
            }
            set {
                this.value = value;
                IsValid = true;
                OnPropertyChanged();
                OnPropertyChanged(nameof(Text));
            }
        }

        public string Text {
            get {
                return string.Format("{0}, {1}, {2}", value.FontName,
                    HeightUiItem == null ? "" : value.Height.ToString(),
                    IsBoldUiItem == null ? "" : value.Bold ? "Bold" : "");
            }
            set {
                // parsing text to Font not support.
            }
        }

        public override bool HasChanges() {
            return Model.Text != value.FontName 
                || (IsBoldUiItem != null && IsBoldUiItem.Text != (value.Bold ? "1" : "0")) 
                || (HeightUiItem != null && HeightUiItem.Text != value.Height.ToString())
                || (CharSetUiItem != null && CharSetUiItem.Text != value.CharSet.ToString());
        }

    }

}
