//
// handles.cs: OO wrappers for some curses objects
//
// Authors:
//   Miguel de Icaza (miguel.de.icaza@gmail.com)
//
// Copyright (C) 2007 Novell (http://www.novell.com)
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
// 
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
// 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//

namespace Unix.Terminal;
#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
public partial class Curses
{
    public class Window
    {
        public readonly nint Handle;

        static Window ()
        {
            initscr ();
            Standard = new Window (console_sharp_get_stdscr ());
            Current = new Window (console_sharp_get_curscr ());
        }

        internal Window (nint handle) { Handle = handle; }
        public static Window Standard { get; }
        public static Window Current { get; }
        public int wtimeout (int delay) { return Curses.wtimeout (Handle, delay); }
        public int notimeout (bool bf) { return Curses.notimeout (Handle, bf); }
        public int keypad (bool bf) { return Curses.keypad (Handle, bf); }
        public int meta (bool bf) { return Curses.meta (Handle, bf); }
        public int intrflush (bool bf) { return Curses.intrflush (Handle, bf); }
        public int clearok (bool bf) { return Curses.clearok (Handle, bf); }
        public int idlok (bool bf) { return Curses.idlok (Handle, bf); }
        public void idcok (bool bf) { Curses.idcok (Handle, bf); }
        public void immedok (bool bf) { Curses.immedok (Handle, bf); }
        public int leaveok (bool bf) { return Curses.leaveok (Handle, bf); }
        public int setscrreg (int top, int bot) { return wsetscrreg (Handle, top, bot); }
        public int scrollok (bool bf) { return Curses.scrollok (Handle, bf); }
        public int wrefresh () { return Curses.wrefresh (Handle); }
        public int redrawwin () { return Curses.redrawwin (Handle); }
#if false
			public int wredrawwin (int beg_line, int num_lines)
			{
				return Curses.wredrawwin (Handle, beg_line, num_lines);
			}
#endif
        public int wnoutrefresh () { return Curses.wnoutrefresh (Handle); }
        public int move (int line, int col) { return wmove (Handle, line, col); }
        public int addch (char ch) { return waddch (Handle, ch); }

        //public int echochar (char ch)
        //{
        //	return Curses.wechochar (Handle, ch);
        //}
        public int refresh () { return Curses.wrefresh (Handle); }
    }

    // Currently unused, to do later
    internal class Screen
    {
        public readonly nint Handle;
        internal Screen (nint handle) { Handle = handle; }
    }

#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member
}
