using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace MMoneyCoderSharp
{
    public static class DBDefine
    {

        [Flags]
        public enum 요구데이터분류
        {
            지수,
            종목,
            환율,
            업종과동향
        }

        /// <summary>
        /// Cut_5,10참조
        /// </summary>
        public enum 선그래프데이터분류
        {
            원달러,
            원엔,
            원위엔,
            원유로,
            코스피수익률,
            코스닥수익률,
            코스피200수익률,
            KRX100수익률,
            코스피업종지수수익률,
            코스닥업종지수수익률,
            코스피종목수익률,
            코스닥종목수익률,
            개인매매동향,
            외국인매매동향,
            기관매매동향,
            코스피매매동향,
            코스닥매매동향
        }

        /// <summary>
        /// Cut_7참조
        /// </summary>
        public enum 봉차트데이터분류
        {
            KOSPI,
            KOSDAQ,
            KOSPI200,
            KRX100,
            선물,
            코스피종목,
            코스닥종목,
            코스피업종지수,
            코스닥업종지수,
            해외지수,
            해외종목,
            거래정지,
            거래정지k
        }

        /// <summary>
        /// Cut_7 세부종목
        /// KRX100, 업종지수는 예상지수가 없음.
        /// </summary>
        public enum 봉차트세부종목
        {
            예상지수,
            일반지수,
            거래량
        }

        /// <summary>
        /// Cut_8, Cut_9 참조
        /// </summary>
        public enum 봉차트매매동향
        {
            주체별매매동향,
            코스피매매동향5단,
            코스닥매매동향5단
        }


        public enum 그리드표그래프종류
        {
            투자자순매수매도상위14번컷,
            프로그램매매13번컷,
            기관순매수현황11번컷,
            지수별매매동향9번컷,
            주체별매매동향8번컷
        }


        public enum 데이터기간
        {
            [StringValue("1")]
            일,
            [StringValue("5")]
            주,
            [StringValue("20")]
            월,
            [StringValue("60")]
            분기,
            [StringValue("120")]
            반기,
            [StringValue("240")]
            연
        }

        public enum 환율
        {
            [StringValue("A09")]
            달러,

            [StringValue("A10")]
            엔,

            [StringValue("A90")]
            위엔,

            [StringValue("A91")]
            유로
        }

        [Flags]
        public enum 국내지수종류
        {
            KOSPI, KOSDAQ, NXT_KOSPI, NXT_KOSDAQ, KOSPI200, KRX100, 선물
        }

        [Flags]
        public enum 국제지수종류
        {
            다우, 나스닥, SP, 독일, 영국, 프랑스, 니케이, 중국상해, 홍콩항셍, 대만가권,
            싱가포르지수, 태국지수, 필리핀지수, 말레이시아지수, 인도네시아지수, 일본,
            유가두바이지수, 유가WTI지수, 유가브랜드유지수, 금지수
        }

        [Flags]
        public enum 국내시장종류
        {
            KOSPI, KOSDAQ, NXT_KOSPI, NXT_KOSDAQ, 거래정지, 거래정지K
        }

        [Flags]
        public enum 종목데이터분류
        {
            거래량, PBR, 현재가, 시가, 액면가, 시가총액,
            등락비율, 주52고저, 시간외등락, 예상시가총액최고최저
        }

        [Flags]
        public enum 원환율
        {
            원위엔, 원달러, 원엔, 원유로
        }

        [Flags]
        public enum 달러환율
        {
            달러엔, 달러유로, 달러위안
        }

        [Flags]
        public enum 업종데이터
        {
            KOSPI, KOSDAQ, 해외
        }

        [Flags]
        public enum 매매동향
        {
            개인, 외국인, 기관, 코스피, 코스닥, 해외종목
        }

        public enum 섹터지수막대그래프분류
        {
            코스피, 코스닥, 다우, 나스닥, SNP
        }

        public enum 판1그래프데이터지수류
        {
            예상지수,
            현재지수,
        }

        public enum 판1그래프데이터산업및종목류
        {
            종목현재가,
            종목예상체결가,
            종목시간외단일가,
            지수업종
        }


        public enum 판1그래프데이터해외류
        {
            해외업종,
            해외종목
        }

        public enum 판3데이터분류
        {
            주요지수_코스피_코스닥_코스피200,
            주요지수_코스피_코스닥_선물,
            예상체결지수_코스피_코스닥_코스피200,
            예상체결지수_코스피_코스닥_선물,
            미국지수,
            중화권지수,
            유럽지수,
            아시아지수_상해_대만_일본,
            달러환율_엔_위안_유로,
            원환율_달러_엔_유로,
            미국국채,
            채권금리,
            유가_두바이_WTI_브랜트,
            광물,
            식자재,
            소맥_옥수수_밀,
            대두_콩_현미,
            커피_코코아_설탕,
            생우_비육우_돈육,
            구리_철광석_니켈,
            천연가스_백금_팔라듐,
            납_아연_주석,
            원면_목화,
            국제금,
            국내금
        }


        public enum 해외지수종류
        {
            [StringValue("DJI@DJI")]
            다우,
            [StringValue("NAS@IXIC")]
            나스닥,
            [StringValue("SPI@SPX")]
            SNP,
            [StringValue("XTR@DAX30")]
            독일,
            [StringValue("LNS@FTSE100")]
            영국,
            [StringValue("PAS@CAC40")]
            프랑스,
            [StringValue("NII@NI225")]
            니케이,
            [StringValue("SHS@000001")]
            중국상해,
            [StringValue("HSI@HSI")]
            홍콩항셍,
            [StringValue("TWS@TI01")]
            대만가권,
            [StringValue("SGI@STI")]
            싱가포르지수,
            [StringValue("THI@SET")]
            태국지수,
            [StringValue("PHI@COMP")]
            필리핀,
            [StringValue("IDI@JKSE")]
            인도네시아,
            [StringValue("MYI@KLSE")]
            말레이시아
        }

        public enum 상세판데이터분류
        {
            시가,
            액면가,
            PBR,
            거래량
        }

        public enum 지도데이터분류
        {
            글로벌,
            아시아,
            미국,
            유럽
        }

        public enum 데이터5단판지수별
        {
            시가총액,
            상승률,
            하락률,
            신고가52주,
            신저가52주,
            시간외상승률,
            시간외하락률,
            예상가시가총액상위,
            업종,
            코스피200,
            거래량,
            ETF
        }

        public enum 데이터5단판기타
        {
            전문가추천,
            테마주,
            테마예상
        }

        public static string GetStringValue(this Enum value)
        {
            // Get the type
            Type type = value.GetType();

            // Get fieldinfo for this type
            FieldInfo fieldInfo = type.GetField(value.ToString());

            // Get the stringvalue attributes
            StringValueAttribute[] attribs = fieldInfo.GetCustomAttributes(
                typeof(StringValueAttribute), false) as StringValueAttribute[];

            // Return the first if there was a match.
            return attribs.Length > 0 ? attribs[0].StringValue : null;
        }

        public class StringValueAttribute : Attribute
        {

            #region Properties

            /// <summary>
            /// Holds the stringvalue for a value in an enum.
            /// </summary>
            public string StringValue { get; protected set; }

            #endregion

            #region Constructor

            /// <summary>
            /// Constructor used to init a StringValue Attribute
            /// </summary>
            /// <param name="value"></param>
            public StringValueAttribute(string value)
            {
                this.StringValue = value;
            }

            #endregion

        }

    }
}
