using System;
using System.Collections.Generic;
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 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 SizeSetttingsInfo SizeSetttingsInfo { get; set; }
        public PostModSplitInfo PostModSplitInfo { get; set; }
        public PostModTileInfo PostModTileInfo { get; set; }
        public MutipleInfo MutipleInfo { get; set; }
        public BookletInfo BookletInfo { 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
    {
        StatusHorizontal,
        StatusVertical,
    }

    public enum EnumPrintContent
    {
        StatusOnlyDocument,
        StatusDocumentAndMarkUps,
        StatusDocumentAndForm,
    }


    public enum EnumPrintMod
    {
        StatusSize,
        StatusPoster,
        StatusMutiple,
        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,
        StatusLeftTall,
        StatusRightTall
    }

    public abstract class PrintMod { }

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


    public class PosterInfo : PrintMod
    {
        public bool CutMarks { 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 MutipleInfo : PrintMod
    {
        public bool AutoRotate { set; get; }
        public EnumDisplayPageNumber EnumDisplayPageNumber { get; set; }
        public int WidthPartNumber { get; set; }
        public int HeightPartNumber { get; set; }
    }

    public class BookletInfo : PrintMod
    {
        public EnumBookletSubset EnumBookletSubset { get; set; }
        public EnumBookletBinding EnumBookletBinding { get; set; }
        public int BeginPageIndex { get; set; }
        public int EndPageIndex { get; set; }
    }
}
