public override string ToString()
        {
            if (IsCastling)
            {
                if (ToSquare.File == File.G)
                {
                    return("0-0");
                }

                if (ToSquare.File == File.C)
                {
                    return("0-0-0");
                }

                throw new ApplicationException("Invalid form of castling");
            }

            if (ScoreInfo.HasFlag(ScoreInfo.StaleMate))
            {
                return("½-½"); //todo, text should be added after the move
            }
            var cap         = Capture != null ? "x" : "";
            var checkormate = ScoreInfo.HasFlag(ScoreInfo.Mate) ? "#" : IsCheck ? "+" : "";
            var piece       = !(Piece is Pawn) ? Piece.Char.ToString() : "";

            if (Piece is Pawn && Capture != null)
            {
                piece = FromSquare.File.ToString().ToLower();
            }

            return($"{piece}{cap}{ToSquare}{checkormate}");
        }