/******************************************************************************
// MARECHAI: Master repository of computing history artifacts information
// ----------------------------------------------------------------------------
//
// Author(s)      : Natalia Portillo <claunia@claunia.com>
//
// --[ License ] --------------------------------------------------------------
//
//     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 <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2003-2021 Natalia Portillo
*******************************************************************************/

using System;
using System.ComponentModel.DataAnnotations;

// ReSharper disable UnusedMember.Global
// ReSharper disable InconsistentNaming

namespace Marechai.Database
{
    public enum NewsType
    {
        NewComputerInDb             = 1, NewConsoleInDb             = 2, NewComputerInCollection = 3,
        NewConsoleInCollection      = 4, UpdatedComputerInDb        = 5, UpdatedConsoleInDb      = 6,
        UpdatedComputerInCollection = 7, UpdatedConsoleInCollection = 8, NewMoneyDonation        = 9
    }

    public enum StatusType
    {
        [Display(Name = "Unknown")]
        Unknown = 0, [Display(Name = "Tested good")]
        TestedGood = 1, [Display(Name = "Not tested")]
        NotTested = 2, [Display(Name = "Tested bad")]
        TestedBad = 3
    }

    public enum CompanyStatus
    {
        /// <summary>Status is unknown or not set</summary>
        Unknown = 0,
        /// <summary>Company is still existing</summary>
        Active = 1,
        /// <summary>Company was sold, totally or partially</summary>
        Sold = 2,
        /// <summary>Company merged with another company to make yet another company</summary>
        Merged = 3,
        /// <summary>Company filled for bankruptcy</summary>
        Bankrupt = 4,
        /// <summary>Company ceased operations for reasons different to bankruptcy</summary>
        Defunct = 5,
        /// <summary>Company renamed possibly with a change of intentions</summary>
        Renamed = 6
    }

    public enum MachineType
    {
        /// <summary>Unknown machine type, should not happen</summary>
        Unknown = 0,
        /// <summary>Computer</summary>
        Computer = 1,
        /// <summary>Videogame console</summary>
        Console = 2
    }

    public enum MemoryType
    {
        /// <summary>Unknown memory type</summary>
        Unknown = 0,
        /// <summary>Dynamic RAM</summary>
        DRAM = 1,
        /// <summary>Fast page mode DRAM</summary>
        FPM = 2,
        /// <summary>Extended data out DRAM</summary>
        EDO = 3,
        /// <summary>Dual-ported video DRAM</summary>
        VRAM = 4,
        /// <summary>Synchronous DRAM</summary>
        SDRAM = 5,
        /// <summary>Double data rate SDRAM</summary>
        DDR = 6,
        /// <summary>Double data rate SDRAM v2</summary>
        DDR2 = 7,
        /// <summary>Double data rate SDRAM v3</summary>
        DDR3 = 8,
        /// <summary>Double data rate SDRAM v4</summary>
        DDR4 = 9,
        /// <summary>Rambus DRAM</summary>
        RDRAM = 10,
        /// <summary>Synchronous graphics RAM</summary>
        SGRAM = 11,
        /// <summary>Pseudostatic RAM</summary>
        PSRAM = 12,
        /// <summary>Static RAM</summary>
        SRAM = 13,
        /// <summary>Read-only memory</summary>
        ROM = 14,
        /// <summary>Programmable ROM</summary>
        PROM = 15,
        /// <summary>Erasable programmable ROM</summary>
        EPROM = 16,
        /// <summary>Electronically-erasable programmable ROM</summary>
        EEPROM = 17,
        /// <summary>NAND flash</summary>
        NAND = 18,
        /// <summary>NOR flash</summary>
        NOR = 19,
        /// <summary>Resistive RAM</summary>
        ReRAM = 20,
        /// <summary>Conductive-bridging RAM</summary>
        CBRAM = 21,
        /// <summary>Domain-wall memory</summary>
        DWM = 22,
        /// <summary>Nano-RAM</summary>
        NanoRAM = 23,
        /// <summary>Millipede memory</summary>
        Millipede = 24,
        /// <summary>Floating Junction Gate RAM</summary>
        FJG = 25,
        /// <summary>Punched paper</summary>
        PunchedPaper = 26,
        /// <summary>Drum memory</summary>
        DrumMemory = 27,
        /// <summary>Magnetic-core</summary>
        MagneticCore = 28,
        /// <summary>Plated wire memory</summary>
        PlatedWire = 29,
        /// <summary>Core rope memory</summary>
        CoreRope = 30,
        /// <summary>Thin-film memory</summary>
        ThinFilm = 31,
        /// <summary>Twistor memory</summary>
        Twistor = 32,
        /// <summary>Bubble memory</summary>
        Bubble = 33
    }

    public enum MemoryUsage
    {
        /// <summary>Unknown usage</summary>
        Unknown = 0,
        /// <summary>
        ///     Contains a boot loader (usually read-only) whose only function is to load the next memory (firmware or
        ///     cartridge)
        /// </summary>
        Bootloader = 1,
        /// <summary>
        ///     Contains hardware initializing, some (or many) low level calls and code to load software from secondary
        ///     storage
        /// </summary>
        Firmware = 2,
        /// <summary>Memory used by software running on the machine</summary>
        Work = 3,
        /// <summary>Memory used by the graphics processing units</summary>
        Video = 4,
        /// <summary>Memory used by the sound synthesizers</summary>
        Sound = 5,
        /// <summary>Memory used to store wave tables</summary>
        Wavetable = 6,
        /// <summary>Memory used as a buffer from secondary storage</summary>
        StorageBuffer = 7,
        /// <summary>Memory used to save arbitrary data and possible also configuration</summary>
        Save = 8,
        /// <summary>Memory used to save only configuration</summary>
        Configuration = 9,
        /// <summary>
        ///     Memory accessible directly to any of the processors in the machine, including graphics processors and sound
        ///     synthesizers
        /// </summary>
        Unified = 10
    }

    public enum StorageType
    {
        /// <summary>Contains an empty interface for user connection</summary>
        Empty = -1,
        /// <summary>Unknown</summary>
        Unknown = 0,
        /// <summary>Unknown magneto-optical</summary>
        MagnetoOptical = 1,
        /// <summary>Generic hard disk</summary>
        HardDisk = 2,
        /// <summary>Microdrive type hard disk</summary>
        Microdrive = 3,
        /// <summary>Zoned hard disk</summary>
        ZonedHardDisk = 4,
        /// <summary>USB flash drives</summary>
        FlashDrive = 5,
        /// <summary>CompactDisc</summary>
        CompactDisc = 6,
        /// <summary>Double-Density CompactDisc (Purple Book)</summary>
        DDCD = 7,
        /// <summary>120mm, Phase-Change, 1298496 sectors, 512 bytes/sector, PD650, ECMA-240, ISO 15485</summary>
        PD650 = 8,
        /// <summary>DVD</summary>
        Dvd = 9,
        /// <summary>DVD-RAM (cartridge only)</summary>
        DVDRAM = 10,
        /// <summary>HD DVD</summary>
        HDDVDROM = 11,
        /// <summary>Blu-ray Disc</summary>
        Bluray = 12,
        /// <summary>Enhanced Versatile Disc</summary>
        EVD = 13,
        /// <summary>Forward Versatile Disc</summary>
        FVD = 14,
        /// <summary>Holographic Versatile Disc</summary>
        HVD = 15,
        /// <summary>China Blue High Definition</summary>
        CBHD = 16,
        /// <summary>High Definition Versatile Multilayer Disc</summary>
        HDVMD = 17,
        /// <summary>Versatile Compact Disc High Density</summary>
        VCDHD = 18,
        /// <summary>Stacked Volumetric Optical Disc</summary>
        SVOD = 19,
        /// <summary>Five Dimensional disc</summary>
        FDDVD = 20,
        /// <summary>Pioneer LaserDisc</summary>
        LD = 21,
        /// <summary>Pioneer LaserDisc data</summary>
        LDROM = 22, LDROM2 = 23, LVROM = 24, MegaLD = 254,
        /// <summary>Sony Hi-MD</summary>
        HiMD = 26,
        /// <summary>Sony MiniDisc</summary>
        MD = 27, MDData = 28, MDData2 = 29,
        /// <summary>5.25", Phase-Change, 1834348 sectors, 8192 bytes/sector, Ultra Density Optical, ECMA-350, ISO 17345</summary>
        UDO = 30,
        /// <summary>5.25", Phase-Change, 3669724 sectors, 8192 bytes/sector, Ultra Density Optical 2, ECMA-380, ISO 11976</summary>
        UDO2 = 31, PlayStationMemoryCard = 32, PlayStationMemoryCard2 = 33,
        /// <summary>Sony PlayStation game CD</summary>
        PS1CD = 34,
        /// <summary>Sony PlayStation 2 game CD</summary>
        PS2CD = 35,
        /// <summary>Sony PlayStation 2 game DVD</summary>
        PS2DVD = 36,
        /// <summary>Sony PlayStation 3 game DVD</summary>
        PS3DVD = 37,
        /// <summary>Sony PlayStation 3 game Blu-ray</summary>
        PS3BD = 38,
        /// <summary>Sony PlayStation 4 game Blu-ray</summary>
        PS4BD = 39,
        /// <summary>Sony PlayStation Portable Universal Media Disc (ECMA-365)</summary>
        UMD = 40,
        /// <summary>Microsoft X-box Game Disc</summary>
        XGD = 41,
        /// <summary>Microsoft X-box 360 Game Disc</summary>
        XGD2 = 42,
        /// <summary>Microsoft X-box 360 Game Disc</summary>
        XGD3 = 43,
        /// <summary>Microsoft X-box One Game Disc</summary>
        XGD4 = 44,
        /// <summary>Sega MegaCD</summary>
        MEGACD = 45,
        /// <summary>Sega Saturn disc</summary>
        SATURNCD = 46,
        /// <summary>Sega/Yamaha Gigabyte Disc</summary>
        GDROM = 47, SegaCard = 48,
        /// <summary>PC-Engine / TurboGrafx cartridge</summary>
        HuCard = 49,
        /// <summary>PC-Engine / TurboGrafx CD</summary>
        SuperCDROM2 = 50,
        /// <summary>Atari Jaguar CD</summary>
        JaguarCD = 51,
        /// <summary>3DO CD</summary>
        ThreeDO = 52,
        /// <summary>NEC PC-FX</summary>
        PCFX = 53,
        /// <summary>NEO-GEO CD</summary>
        NeoGeoCD = 54,
        /// <summary>8" floppy</summary>
        Floppy = 55,
        /// <summary>5.25" floppy</summary>
        Minifloppy = 56,
        /// <summary>3.5" floppy</summary>
        Microfloppy = 57,
        /// <summary>5.25", DS, ?D, ?? tracks, ?? spt, 512 bytes/sector, GCR, opposite side heads, aka Twiggy</summary>
        AppleFileWare = 58, Bernoulli = 59, Bernoulli2            = 60, Ditto              = 61,
        DittoMax                      = 62, Jaz                   = 63, Jaz2               = 64,
        PocketZip                     = 65, REV120                = 66, REV35              = 67,
        REV70                         = 68, ZIP100                = 69, ZIP250             = 70,
        ZIP750                        = 71, CompactCassette       = 72, Data8              = 73,
        MiniDV                        = 74, CFast                 = 75, CompactFlash       = 76,
        CompactFlashType2             = 77, EZ135                 = 78, EZ230              = 79,
        Quest                         = 80, SparQ                 = 81, SQ100              = 82,
        SQ200                         = 83, SQ300                 = 84, SQ310              = 85,
        SQ327                         = 86, SQ400                 = 87, SQ800              = 88,
        SQ1500                        = 89, SQ2000                = 90, SyJet              = 91,
        FamicomGamePak                = 92, GameBoyAdvanceGamePak = 93, GameBoyGamePak     = 94,
        GOD                           = 95, N64DD                 = 96, N64GamePak         = 97,
        NESGamePak                    = 98, Nintendo3DSGameCard   = 99, NintendoDiskCard   = 100,
        NintendoDSGameCard            = 101, NintendoDSiGameCard  = 102, SNESGamePak       = 103,
        SNESGamePakUS                 = 104, WOD                  = 105, WUOD              = 106,
        SwitchGameCard                = 107, MemoryStick          = 108, MemoryStickDuo    = 109,
        MemoryStickMicro              = 110, MemoryStickPro       = 111, MemoryStickProDuo = 112,
        microSD                       = 113, miniSD               = 114, SecureDigital     = 115,
        MMC                           = 116, MMCmicro             = 117, RSMMC             = 118,
        MMCplus                       = 118, MMCmobile            = 119, eMMC              = 120,
        MO120                         = 121, MO90                 = 122, MO300             = 123,
        MO356                         = 124, CompactFloppy        = 125, DemiDiskette      = 126,
        /// <summary>3.5", 652 tracks, 2 sides, 512 bytes/sector, Floptical, ECMA-207, ISO 14169</summary>
        Floptical = 127, HiFD = 128, QuickDisk = 129, UHD144       = 130,
        VideoFloppy           = 131, Wafer     = 132, ZXMicrodrive = 133,
        BeeCard               = 134, Borsu     = 135, DataStore    = 136,
        MiniCard              = 137, Orb       = 138, Orb5         = 139,
        SmartMedia            = 140, xD        = 141, XQD          = 142,
        DataPlay              = 143, LS120     = 144, LS240        = 145,
        FD32MB                = 146, RDX       = 147, PunchedCard  = 148
    }

    public enum StorageInterface
    {
        Unknown = 0, ACSI     = 1, ATA          = 2,
        XTA     = 3, ESDI     = 4, SCSI         = 5,
        USB     = 6, FireWire = 7, SASI         = 8,
        ST506   = 9, IPI      = 10, SMD         = 11,
        SATA    = 12, SSA     = 13, DSSI        = 14,
        HIPPI   = 15, SAS     = 16, FC          = 17,
        PCIe    = 18, M2      = 19, SataExpress = 20
    }

    public enum ColorSpace : ushort
    {
        [Display(Name = "sRGB")]
        Srgb = 1, [Display(Name = "Adobe RGB")]
        AdobeRgb = 2, [Display(Name = "Wide Gamut RGB")]
        WideGamutRgb = 4093, [Display(Name = "ICC Profile")]
        IccProfile = 65534, [Display(Name = "Uncalibrated")]
        Uncalibrated = 65535
    }

    public enum Contrast : ushort
    {
        Normal = 0, Low = 1, High = 2
    }

    public enum ExposureMode : ushort
    {
        Auto = 0, Manual = 1, [Display(Name = "Auto bracket")]
        AutoBracket = 2
    }

    public enum ExposureProgram : ushort
    {
        [Display(Name = "Not Defined")]
        Undefined = 0, [Display(Name = "Manual")]
        Manual = 1, [Display(Name = "Program AE")]
        ProgramAe = 2, [Display(Name = "Aperture-priority AE")]
        ApAe = 3, [Display(Name = "Shutter speed priority AE")]
        ShutterAe = 4, [Display(Name = "Creative (Slow speed)")]
        Creative = 5, [Display(Name = "Action (High speed)")]
        Action = 6, [Display(Name = "Portrait")]
        Portrait = 7, [Display(Name = "Landscape")]
        Landscape = 8, [Display(Name = "Bulb")]
        Bulb = 9
    }

    public enum Flash : ushort
    {
        [Display(Name = "No Flash")]
        None = 0, [Display(Name = "Fired")]
        Fired = 1, [Display(Name = "Fired, Return not detected")]
        FiredNoReturn = 5, [Display(Name = "Fired, Return detected")]
        FiredReturn = 7, [Display(Name = "On, Did not fire")]
        OnDidNotFire = 8, [Display(Name = "On, Fired")]
        OnFired = 9, [Display(Name = "On, Return not detected")]
        OnNoReturn = 13, [Display(Name = "On, Return detected")]
        OnReturn = 15, [Display(Name = "Off, Did not fire")]
        OffDidNotFire = 16, [Display(Name = "Off, Did not fire, Return not detected")]
        OffDidNotFireNoReturn = 20, [Display(Name = "Auto, Did not fire")]
        AutoDidNotFire = 24, [Display(Name = "Auto, Fired")]
        AutoFired = 25, [Display(Name = "Auto, Fired, Return not detected")]
        AutoFiredNoReturn = 29, [Display(Name = "Auto, Fired, Return detected")]
        AutoFiredReturn = 31, [Display(Name = "No flash function")]
        NoFlash = 32, [Display(Name = "Off, No flash function")]
        OffNoFlash = 48, [Display(Name = "Fired, Red-eye reduction")]
        FiredRedEye = 65, [Display(Name = "Fired, Red-eye reduction, Return not detected")]
        FiredRedEyeNoReturn = 69, [Display(Name = "Fired, Red-eye reduction, Return detected")]
        FiredRedEyeReturn = 71, [Display(Name = "On, Red-eye reduction")]
        OnRedEye = 73, [Display(Name = "On, Red-eye reduction, Return not detected")]
        OnRedEyeNoReturn = 77, [Display(Name = "On, Red-eye reduction, Return detected")]
        OnRedEyeReturn = 79, [Display(Name = "Off, Red-eye reduction")]
        OffRedEye = 80, [Display(Name = "Auto, Did not fire, Red-eye reduction")]
        AutoNotFireRedEye = 88, [Display(Name = "Auto, Fired, Red-eye reduction")]
        AutoFiredRedEye = 89, [Display(Name = "Auto, Fired, Red-eye reduction, Return not detected")]
        AutoFiredRedEyeNoReturn = 93, [Display(Name = "Auto, Fired, Red-eye reduction, Return detected")]
        AutoFiredRedEyeReturn = 95
    }

    public enum LightSource : ushort
    {
        [Display(Name = "Unknown")]
        Unknown = 0, [Display(Name = "Daylight")]
        Daylight = 1, [Display(Name = "Fluorescent")]
        Fluorescent = 2, [Display(Name = "Tungsten (Incandescent)")]
        Incandescent = 3, [Display(Name = "Flash")]
        Flash = 4, [Display(Name = "Fine Weather")]
        FineWeather = 9, [Display(Name = "Cloudy")]
        Cloudy = 10, [Display(Name = "Shade")]
        Shade = 11, [Display(Name = "Daylight Fluorescent")]
        DaylightFluorescent = 12, [Display(Name = "Day White Fluorescent")]
        DayWhiteFluorescent = 13, [Display(Name = "Cool White Fluorescent")]
        CoolWhiteFluorescent = 14, [Display(Name = "White Fluorescent")]
        WhiteFluorescent = 15, [Display(Name = "Warm White Fluorescent")]
        WarmWhiteFluorescent = 16, [Display(Name = "Standard Light A")]
        StandardLightA = 17, [Display(Name = "Standard Light B")]
        StandardLightB = 18, [Display(Name = "Standard Light C")]
        StandardLightC = 19, [Display(Name = "D55")]
        D55 = 20, [Display(Name = "D65")]
        D65 = 21, [Display(Name = "D75")]
        D75 = 22, [Display(Name = "D50")]
        D50 = 23, [Display(Name = "ISO Studio Tungsten")]
        ISOStudioTungsten = 24, [Display(Name = "Other")]
        Other = 255
    }

    public enum MeteringMode : ushort
    {
        [Display(Name = "Unknown")]
        Unknown = 0, [Display(Name = "Average")]
        Average = 1, [Display(Name = "Center-weighted average")]
        CenterWeightedAverage = 2, [Display(Name = "Spot")]
        Spot = 3, [Display(Name = "Multi-spot")]
        MultiSpot = 4, [Display(Name = "Multi-segment")]
        MultiSegment = 5, [Display(Name = "Partial")]
        Partial = 6, [Display(Name = "Other")]
        Other = 255
    }

    public enum Orientation : ushort
    {
        [Display(Name = "Horizontal (normal)")]
        Horizontal = 1, [Display(Name = "Mirror horizontal")]
        MirrorHorizontal = 2, [Display(Name = "Rotate 180")]
        Rotate180 = 3, [Display(Name = "Mirror vertical")]
        MirrorVertical = 4, [Display(Name = "Mirror horizontal and rotate 270 CW")]
        MirrorHorizontalAndRotate270CW = 5, [Display(Name = "Rotate 90 CW")]
        Rotate90CW = 6, [Display(Name = "Mirror horizontal and rotate 90 CW")]
        MirrorHorizontalAndRotate90CW = 7, [Display(Name = "Rotate 270 CW")]
        Rotate270CW = 8
    }

    public enum ResolutionUnit : ushort
    {
        None = 1, Inches = 2, Centimeters = 3
    }

    public enum Saturation : ushort
    {
        Normal = 0, Low = 1, High = 2
    }

    public enum SceneCaptureType : ushort
    {
        Standard = 0, Landscape = 1, Portrait = 2,
        Night    = 3
    }

    public enum SensingMethod : ushort
    {
        [Display(Name = "Not defined")]
        Undefined = 1, [Display(Name = "One-chip color area")]
        OneChipColorArea = 2, [Display(Name = "Two-chip color area")]
        TwoChipColorArea = 3, [Display(Name = "Three-chip color area")]
        ThreeChipColorArea = 4, [Display(Name = "Color sequential area")]
        ColorSequentialArea = 5, [Display(Name = "Trilinear")]
        Trilinear = 7, [Display(Name = "Color sequential linear")]
        ColorSequentialLinear = 8
    }

    public enum SubjectDistanceRange : ushort
    {
        Unknown = 0, Macro = 1, Close = 2,
        Distant = 3
    }

    public enum WhiteBalance : ushort
    {
        Auto = 0, Manual = 1
    }

    public enum Sharpness : ushort
    {
        Normal = 0, Low = 1, High = 2
    }

    public enum AuditType : byte
    {
        None    = 0, Created = 1, Updated = 2,
        Deleted = 3
    }

    [Flags]
    public enum DumpStatus : ulong
    {
        Unknown              = 0, Cracked = 1 << 0, Fixed              = 1 << 1,
        Hacked               = 1              << 2, Modified           = 1 << 3, Pirated                 = 1 << 4,
        Trained              = 1              << 5, Translated         = 1 << 6, Overdumped              = 1 << 7,
        Underdumped          = 1              << 8, Infected           = 1 << 9, Damaged                 = 1 << 10,
        Verified             = 1              << 11, MissingData       = 1 << 12, MissingNonRequiredData = 1 << 13,
        MissingEssentialData = 1              << 14, DamagedSubchannel = 1 << 15
    }

    [Flags]
    public enum SubchannelStatus : byte
    {
        None = 0, P = 1 << 0, Q = 1 << 1,
        R    = 1        << 2, S = 1 << 3, T = 1 << 4,
        U    = 1        << 5, V = 1 << 6, W = 1 << 7
    }

    public enum DistributionMode : uint
    {
        Unknown = 0, Retail = 1, Bundle = 2,
        Oem     = 3
    }

    public enum MasteringTextType : byte
    {
        Unknown   = 0, LotNumber     = 1, MasteringSid = 2,
        MouldSid  = 3, MasteringCode = 4, Barcode      = 5,
        Toolstamp = 6
    }

    public enum DocumentScanType : uint
    {
        Page            = 0, Cover = 1, BackCover     = 2,
        TableOfContents = 3, Index = 4, CopyrightPage = 5
    }
}