using System.Collections.Generic;
using System.Windows.Forms;

namespace Tainikey.Mappers
{
    public class SpecialMapper : IKeyMapper
    {
        public KeyboardEngine Engine { get; set; }

        // Định nghĩa các mã dấu tổ hợp Unicode
        private const string COMBINING_MACRON = "\u0304"; // Dấu ngang
        private const string COMBINING_CARON = "\u030c"; // Dấu móc

        public bool TryMap(Keys key, bool shift, out string output)
        {
            output = null;
            if (!frmMain.SpecialMarksEnabled) return false;

            // Lấy ký tự cuối cùng vừa gõ từ Engine
            char? lastChar = Engine?.LastTypedChar;

            // Nếu không có ký tự nào trước đó hoặc là khoảng trắng thì không bỏ dấu
            if (lastChar == null || char.IsWhiteSpace(lastChar.Value)) return false;

            // Xử lý dấu ngang (Phím -)
            if (key == Keys.OemMinus && !shift)
            {
                // Không xóa ký tự cũ (\b), chỉ gửi thêm mã dấu tổ hợp để nó đè lên
                output = COMBINING_MACRON;
                return true;
            }

            // Xử lý dấu móc (Phím _ tức Shift + -)
            if (key == Keys.OemMinus && shift)
            {
                output = COMBINING_CARON;
                return true;
            }

            return false;
        }
    }
}