using System;
using System.Collections.Generic;
using System.Drawing.Printing;
using System.Linq;
using System.Numerics;
using System.Runtime.Remoting.Channels;
using System.Text;
using System.Threading.Tasks;
using static PDF_Office.Model.Dialog.HomePageToolsDialogs.HomePagePrinter.HomePagePrinterDialogModel;

namespace PDF_Office.Model.Dialog.HomePageToolsDialogs.HomePagePrinter
{
    public class PrintSettingsInfo
    {
        public bool IsBlackAndWhite { get; set; }
        public bool IsReverseOrder { get; set; }
        public EnumPaperSize EnumPaperSize { get; set; }
        public EnumPageRange EnumPageRange { get; set; }
        public bool IsIndexReverse { get; set; }
        public EnumPrintOrientation EnumPrintOrientation { get; set; }
        public bool PrintWithAnnot { get; set; }
        public bool PrintWithForm { get; set; }
        public int Copies { get; set; }
        public string PrinterName { get; set; }
        public string CustomizeRange { get; set; }
        public PrintMod printMod { get; set; }
    }

    public class HomePagePrinterDialogModel
    {
      
    }

    public enum EnumPaperSize
    { 
        StatusA3,
        StatusA4,
        StatusA5,
        StatusB5,
        StatusNo10Envelope,
        StatusChoukei3Envelope,
        StatusDLEnvelope,
        StatusJISB5,
        StatusROC16K,
        StatusExtraLargeBA3,
        StatusTabloid,
        StatusExraLargeTabloid,
        StatusAmericanLegal,
        StatusAmericanLetter,
        StatusCustomized
    }



    public enum EnumSizeType
    {
        StatusAdaptive,
        StatusActural,
        StatusCustomized,
    }

    public enum EnumPageRange
    {
        StatusAllRange,
        StatusCurrentRange,
        StatusOddRange,
        StatusEvenRange,
        StatusCustomizedRange
    }

    public enum EnumPrintOrientation
    {
        StatusLandscape,
        StatusPortrait
    }

    public enum EnumPrintContent
    {
        StatusOnlyDocument,
        StatusDocumentAndMarkUps,
        StatusDocumentAndForm,
    }

    public enum EnumPrintMod
    {
        StatusSize,
        StatusPoster,
        StatusMultiple,
        StatusBooklet
    }

    public enum EnumPosterMod
    {
        StatusTile,
        StatusSplit
    }

    public enum EnumDisplayPageNumber
    {
        StatusTwo,
        StatusFour,
        StatusSix,
        StatusNine,
        StatusSixteen,
        StatusCustomized
    }

    public enum EnumPageOrder
    {
        StatusHorizontalOrder,
        StatusHorizontalReverseOrder,
        StatusVerticalOrder,
        StatusVerticalReverseOrder,
    }

    public enum EnumBookletSubset
    {
        StatusBothSides,
        StatusFrontSideOnly,
        StatusBackSideOnly
    }

    public enum EnumBookletBinding
    {
        StatusLeft,
        StatusRight,
    }

    public abstract class PrintMod { }

    public class SizeInfo : PrintMod
    {
        public EnumSizeType EnumSizeType { get; set; }
        public int DisplayRatio { get; set; }
    }


    public class PosterInfo : PrintMod
    {
        public EnumPosterMod EnumPosterMod; 
        public bool HasCutMarks { get; set; }
        public bool HasLabel { get; set; }
        public double OverLap { get; set; }
    }

    public class PostModTileInfo : PosterInfo
    {
        public int TileRatio { get; set; }
    }

    public class PostModSplitInfo : PosterInfo
    {
        public EnumDisplayPageNumber EnumDisplayPageNumber { get; set; }
        public int TileRatio { get; set; }
        public int WidthPartNumber { get; set; }
        public int HeightPartNumber { get; set; }
    }

    public class MultipleInfo : PrintMod
    {
        public EnumPageOrder EnumPageOrder { set; get; }
        public EnumDisplayPageNumber EnumDisplayPageNumber { get; set; }
        public int HorizontalPageNumber { get; set; }
        public int VerticalPageNumber { get; set; }
        public bool IsAutoRotate { get; set; }
    }

    public class BookletInfo : PrintMod
    {
        public EnumBookletSubset EnumBookletSubset { get; set; }
        public EnumBookletBinding EnumBookletBinding { get; set; }
        public int BeginPaperIndex { get; set; }
        public int EndPaperIndex { get; set; }
        public bool IsAutoRotate { get; set; }
    }
}
