/* This file is part of OpenSubtitles Handler
   A library that handle OpenSubtitles.org XML-RPC methods.
   Copyright © Ala Ibrahim Hadid 2013
   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   You should have received a copy of the GNU General Public License
   along with this program.  If not, see .
 */
using System;
namespace OpenSubtitlesHandler.Console
{
    public class OSHConsole
    {
        /// 
        /// Write line to the console and raise the "LineWritten" event
        /// 
        /// 
        /// The debug line
        /// The status
        public static void WriteLine(string text, DebugCode code = DebugCode.None)
        {
            if (LineWritten != null)
                LineWritten(null, new DebugEventArgs(text, code));
        }
        /// 
        /// Update the last written line
        /// 
        /// The debug line
        /// The status
        public static void UpdateLine(string text, DebugCode code = DebugCode.None)
        {
            if (UpdateLastLine != null)
                UpdateLastLine(null, new DebugEventArgs(text, code));
        }
        public static event EventHandler LineWritten;
        public static event EventHandler UpdateLastLine;
    }
    public enum DebugCode
    {
        None,
        Good,
        Warning,
        Error
    }
    /// 
    /// Console Debug Args
    /// 
    public class DebugEventArgs : System.EventArgs
    {
        public DebugCode Code { get; private set; }
        public string Text { get; private set; }
        /// 
        /// Console Debug Args
        /// 
        /// The debug line
        /// The status
        public DebugEventArgs(string text, DebugCode code)
        {
            this.Text = text;
            this.Code = code;
        }
    }
    public struct DebugLine
    {
        public DebugLine(string debugLine, DebugCode status)
        {
            this.debugLine = debugLine;
            this.status = status;
        }
        string debugLine;
        DebugCode status;
        public string Text
        { get { return debugLine; } set { debugLine = value; } }
        public DebugCode Code
        { get { return status; } set { status = value; } }
    }
}