using System;
using System.Collections.Generic;
namespace gaseous_romsignatureobject
{
    /// 
    /// Object returned by all signature engines containing metadata about the ROM's in the data files
    ///
    /// This class was based on the TOSEC dataset, so may need to be expanded as new signature engines are added
    /// 
	public class RomSignatureObject
    {
        public string? Name { get; set; }
        public string? Description { get; set; }
        public string? Category { get; set; }
        public string? Version { get; set; }
        public string? Author { get; set; }
        public string? Email { get; set; }
        public string? Homepage { get; set; }
        public Uri? Url { get; set; }
        public string? SourceType { get; set; }
        public string SourceMd5 { get; set; } = "";
        public string SourceSHA1 { get; set; } = "";
        public List Games { get; set; } = new List();
        public class Game
        {
            public string? Name { get; set; }
            public string? Description { get; set; }
            public string? Year { get; set; }
            public string? Publisher { get; set; }
            public DemoTypes Demo { get; set; }
            public string? System { get; set; }
            public string? SystemVariant { get; set; }
            public string? Video { get; set; }
            public string? Country { get; set; }
            public string? Language { get; set; }
            public string? Copyright { get; set; }
            public List Roms { get; set; } = new List();
            public int RomCount
            {
                get
                {
                    return Roms.Count();
                }
            }
            public enum DemoTypes
            {
                NotDemo = 0,
                demo = 1,
                demo_kiosk = 2,
                demo_playable = 3,
                demo_rolling = 4,
                demo_slideshow = 5
            }
            public class Rom
            {
                public string? Name { get; set; }
                public UInt64? Size { get; set; }
                public string? Crc { get; set; }
                public string? Md5 { get; set; }
                public string? Sha1 { get; set; }
                public string? DevelopmentStatus { get; set; }
                public List flags { get; set; } = new List();
                public RomTypes RomType { get; set; }
                public string? RomTypeMedia { get; set; }
                public string? MediaLabel { get; set; }
                public enum RomTypes
                {
                    /// 
                    /// Media type is unknown
                    /// 
                    Unknown = 0,
                    /// 
                    /// Optical media
                    /// 
                    Disc = 1,
                    /// 
                    /// Magnetic media
                    /// 
                    Disk = 2,
                    /// 
                    /// Individual files
                    /// 
                    File = 3,
                    /// 
                    /// Individual pars
                    /// 
                    Part = 4,
                    /// 
                    /// Tape base media
                    /// 
                    Tape = 5,
                    /// 
                    /// Side of the media
                    /// 
                    Side = 6
                }
            }
        }
    }
}