using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System;
using System.Linq;
using System.Reflection;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc.Rendering;

namespace AMESCoreStudio.WebApi.Enum
{
    /// <summary>
    /// 
    /// </summary>
    public class EnumPCS
    {
        /// <summary>
        /// 列印方式
        /// </summary>
        public enum EnumPrintMode
        {
            /// <summary>
            /// ON Line列印
            /// </summary>
            [Display(Name = "ON Line列印")]
            ON = 1,

            /// <summary>
            /// OFF Line列印
            /// </summary>
            [Display(Name = "OFF Line列印")]
            OFF = 2
        }

        /// <summary>
        /// 認證Logo
        /// </summary>
        public enum EnumApproveLogo
        {
            /// <summary>
            /// CE
            /// </summary>
            [Display(Name = "CE")]
            CE,

            /// <summary>
            /// KCC
            /// </summary>
            [Display(Name = "KCC")]
            KCC,

            /// <summary>
            /// FCC
            /// </summary>
            [Display(Name = "FCC")]
            FCC,

            /// <summary>
            /// CE/FCC
            /// </summary>
            [Display(Name = "CE/FCC")]
            CE_FCC,

            /// <summary>
            /// ROHS
            /// </summary>
            [Display(Name = "ROHS")]
            ROHS,

            /// <summary>
            /// UL
            /// </summary>
            [Display(Name = "UL")]
            UL,

            /// <summary>
            /// WEEE
            /// </summary>
            [Display(Name = "WEEE")]
            WEEE,

            /// <summary>
            /// MADE IN
            /// </summary>
            [Display(Name = "MADE IN")]
            MADE_IN,

            /// <summary>
            /// 皆無
            /// </summary>
            [Display(Name = "皆無")]
            N
        }

        /// <summary>
        /// 公司Logo
        /// </summary>
        public enum EnumCompanyLogo
        {
            /// <summary>
            /// A VALUE
            /// </summary>
            [Display(Name = "A VALUE")]
            A,

            /// <summary>
            /// 無
            /// </summary>
            [Display(Name = "無")]
            N
        }

        /// <summary>
        /// WipAttr
        /// </summary>
        public enum EnumWipAttr
        {
            /// <summary>
            /// 正常工單
            /// </summary>
            [Display(Name = "正常工單")]
            A,

            /// <summary>
            /// 非標96工單
            /// </summary>
            [Display(Name = "非標96工單-非標單據:人員輸入")]
            B,
        }

        /// <summary>
        /// 工單資訊 系統工程資訊 Power mode
        /// </summary>
        public enum EnumWipSystemPMType
        {
            /// <summary>
            /// H/W ATX
            /// </summary>
            [Display(Name = "H/W ATX")]
            A = 1,

            /// <summary>
            /// H/W ATX,S/W AT
            /// </summary>
            [Display(Name = "H/W ATX,S/W AT")]
            B = 2,

            /// <summary>
            /// H/W AT
            /// </summary>
            [Display(Name = "H/W AT")]
            C = 3,

            /// <summary>
            /// Other
            /// </summary>
            [Display(Name = "Other")]
            D = 4,

        }

        /// <summary>
        /// 工單資訊 系統工程資訊 Type
        /// </summary>
        public enum EnumWipSystemType
        {
            /// <summary>
            /// N/A
            /// </summary>
            [Display(Name = "N/A")]
            A = 1,

            /// <summary>
            /// Check
            /// </summary>
            [Display(Name = "Check")]
            B = 2,

            /// <summary>
            /// Program
            /// </summary>
            [Display(Name = "Program")]
            C = 3,

            /// <summary>
            /// 備註說明
            /// </summary>
            [Display(Name = "備註說明")]
            D = 4,
        }

        /// <summary>
        /// 工單資訊 系統工程資訊 DMI燒入 Type
        /// </summary>
        public enum EnumWipSystemDMIBIType
        {
            /// <summary>
            /// YES
            /// </summary>
            [Display(Name = "YES")]
            Y = 1,

            /// <summary>
            /// N/A
            /// </summary>
            [Display(Name = "N/A")]
            N = 2,

        }

        /// <summary>
        /// 燒機時間
        /// </summary>
        public enum EnumWipBITemperatuer
        {
            /// <summary>
            /// NA
            /// </summary>
            [Display(Name = "NA")]
            N = 1,

            /// <summary>
            /// 室溫
            /// </summary>
            [Display(Name = "室溫")]
            A = 2,

            /// <summary>
            /// -40~+85度
            /// </summary>
            [Display(Name = "-40~+85度")]
            B = 3,

            /// <summary>
            /// -20~+70度
            /// </summary>
            [Display(Name = "-20~+70度")]
            D = 4,

            /// <summary>
            /// 50度
            /// </summary>
            [Display(Name = "50度")]
            E = 5,

            /// <summary>
            /// 55度
            /// </summary>
            [Display(Name = "55度")]
            F = 6,

            /// <summary>
            /// 40度
            /// </summary>
            [Display(Name = "40度")]
            G = 7,
        }

        /// <summary>
        /// 燒機軟體
        /// </summary>
        public enum EnumWipBI_OS
        {
            /// <summary>
            /// NA
            /// </summary>
            [Display(Name = "NA")]
            N = 1,

            /// <summary>
            /// Memtest86
            /// </summary>
            [Display(Name = "Memtest86")]
            A = 2,

            /// <summary>
            /// Burnin test
            /// </summary>
            [Display(Name = "Burnin test")]
            B = 3,

            /// <summary>
            /// Memtest86+Burnin test
            /// </summary>
            [Display(Name = "Memtest86+Burnin test")]
            D = 4,

            /// <summary>
            /// Power onoff+Burnin test
            /// </summary>
            [Display(Name = "Power onoff+Burnin test")]
            E = 5,

            /// <summary>
            /// Android APP
            /// </summary>
            [Display(Name = "Android APP")]
            F = 6,

            /// <summary>
            /// QA Plus
            /// </summary>
            [Display(Name = "QA Plus")]
            G = 7,


            /// <summary>
            /// Stress test
            /// </summary>
            [Display(Name = "Stress test")]
            H = 8,
        }

        /// <summary>
        /// SOP Type
        /// </summary>
        public enum EnumWipSopType
        {
            /// <summary>
            /// SOP
            /// </summary>
            [Display(Name = "SOP")]
            A = 1,

            /// <summary>
            /// 技術轉移
            /// </summary>
            [Display(Name = "技術轉移")]
            B = 2,

            /// <summary>
            /// N/A
            /// </summary>
            [Display(Name = "N/A")]
            C = 3,

            /// <summary>
            /// 暫時文件
            /// </summary>
            [Display(Name = "暫時文件")]
            D = 4,

            /// <summary>
            /// REWORK
            /// </summary>
            [Display(Name = "REWORK")]
            E = 5,

            /// <summary>
            /// 差異SOP
            /// </summary>
            [Display(Name = "差異SOP")]
            F = 6,
        }

        /// <summary>
        /// SMD點膠
        /// </summary>
        public enum EnumWipBoardSMDType
        {
            /// <summary>
            /// A面全點
            /// </summary>
            [Display(Name = "A面全點")]
            A = 1 ,

            /// <summary>
            /// B面全點
            /// </summary>
            [Display(Name = "B面全點")]
            B = 2,

            /// <summary>
            /// A面部份點膠
            /// </summary>
            [Display(Name = "A面部份點膠")]
            C = 3,

            /// <summary>
            /// B面部份點膠
            /// </summary>
            [Display(Name = "B面部份點膠")]
            D = 4,

            /// <summary>
            /// 不須點膠
            /// </summary>
            [Display(Name = "不須點膠")]
            F = 6,
        }

        /// <summary>
        /// DIP
        /// </summary>
        public enum EnumWipBoardDIPType
        {
            /// <summary>
            /// A面
            /// </summary>
            [Display(Name = "A面")]
            A = 1,

            /// <summary>
            /// B面
            /// </summary>
            [Display(Name = "B面")]
            B = 2,

            /// <summary>
            /// NA
            /// </summary>
            [Display(Name = "NA")]
            N = 3,
        }

        /// <summary>
        /// PCB烘烤
        /// </summary>

        public enum EnumWipBoardPCBBakeType
        {
            /// <summary>
            /// 依廠內規範
            /// </summary>
            [Display(Name = "依廠內規範")]
            A = 1,

            /// <summary>
            /// 125℃/ 2Hr
            /// </summary>
            [Display(Name = "125℃/ 2Hr")]
            B = 2,

            /// <summary>
            /// 120℃/ 1Hr (FPC)
            /// </summary>
            [Display(Name = "120℃/ 1Hr (FPC)")]
            C = 3,

            /// <summary>
            /// 其他
            /// </summary>
            [Display(Name = "其他")]
            D = 4,
        }

        /// <summary>
        /// PCB加工
        /// </summary>

        public enum EnumWipBoardPCBProcessingType
        {
            /// <summary>
            /// 噴印字樣
            /// </summary>
            [Display(Name = "噴印字樣")]
            A = 1,

            /// <summary>
            /// 其他
            /// </summary>
            [Display(Name = "其他")]
            B = 2,

            /// <summary>
            /// NA
            /// </summary>
            [Display(Name = "NA")]
            N = 0,
        }

        /// <summary>
        ///  錫膏
        /// </summary>

        public enum EnumWipBoardSolderPasteType
        {
            /// <summary>
            /// KOKI 無鉛錫膏(S3X58-M406-3)
            /// </summary>
            [Display(Name = "KOKI 無鉛錫膏(S3X58-M406-3)")]
            A = 1,

            /// <summary>
            /// 千住 無鉛錫膏(M705-221BM5-32-11.5K3)
            /// </summary>
            [Display(Name = "千住 無鉛錫膏(M705-221BM5-32-11.5K3)")]
            B = 2,

            /// <summary>
            /// 千住 無鹵錫膏(M705-S101ZH-S4)、無鹵錫絲(SHF RC101 F3 M705)
            /// </summary>
            [Display(Name = "千住 無鹵錫膏(M705-S101ZH-S4)、無鹵錫絲(SHF RC101 F3 M705)")]
            C = 3,

            /// <summary>
            /// 其他
            /// </summary>
            [Display(Name = "其他")]
            D = 4,
        }


      
        /// <summary>
        /// Get Enum Display
        /// </summary>
        /// <param name="enumValue"></param>
        /// <returns></returns>
        public static string GetDisplayName(System.Enum enumValue)
        {
            return enumValue.GetType()?
           .GetMember(enumValue.ToString())?.First()?
           .GetCustomAttribute<DisplayAttribute>()?
           .Name;
        }
    }
}