# Event Slots
events = [
    'on_event_connect',
    'on_receive_msg',
    'on_receive_tr_data',
    'on_receive_real_data',
    'on_receive_chejan_data',
    'on_receive_condition_ver',
    'on_receive_tr_condition',
    'on_receive_real_condition'
]


def is_valid_event(event):
    """
    Returns True if event is valid, else False.

    :param event: str
        One of the pre-defined event names in string.
    :return: bool
    """
    if event not in events:
        print(f"{event} is not a valid event.\nSelect one of {events}.")
        return False
    return True


# 시장
markets = {
    '0': 'KOSPI',
    '3': 'ELW',
    '4': '뮤추얼펀드',
    '5': '신주인수권',
    '6': '리츠',
    '8': 'ETF',
    '9': '하이일드펀드',
    '10': 'KOSDAQ',
    '30': 'K-OTC',
    '50': 'KONEX',
    '60': 'ETN'
}


# 시장구분
market_gubuns = {
    '0': 'KOSPI',
    '1': 'KOSDAQ',
    '2': 'KOSPI200',
    '4': 'KOSPI100(150)',
    '7': 'KRX100'
}


# 업종
sectors = {
    '001': '종합(KOSPI)',
    '002': '대형주',
    '003': '중형주',
    '004': '소형주',
    '005': '음식료업',
    '006': '섬유의복',
    '007': '종이목재',
    '008': '화학',
    '009': '의약품',
    '010': '비금속광물',
    '011': '철강금속',
    '012': '기계',
    '013': '전기전자',
    '014': '의료정밀',
    '015': '운수장비',
    '016': '유통업',
    '017': '전기가스업',
    '018': '건설업',
    '019': '운수창고',
    '020': '통신업',
    '021': '금융업',
    '022': '은행',
    '024': '증권',
    '025': '보험',
    '026': '서비스업',
    '027': '제조업',
    '603': '변동성지수',
    '604': '코스피고배당50',
    '605': '코스피배당성장50',
    '101': '종합(KOSDAQ)',
    '103': '기타서비스',
    '104': '코스닥IT종합',
    '106': '제조',
    '107': '건설',
    '108': '유통',
    '110': '운송',
    '111': '금융',
    '112': '통신방송서비스',
    '113': 'IT S/W & SVC',
    '114': 'IT H/W',
    '115': '음식료/담배',
    '116': '섬유/의류',
    '117': '종이/목재',
    '118': '출판/매체복제',
    '119': '화학',
    '120': '제약',
    '121': '비금속',
    '122': '금속',
    '123': '기계/장비',
    '124': '일반전기전자',
    '125': '의료/정밀 기기',
    '126': '운송장비/부품',
    '127': '기타 제조',
    '128': '통신서비스',
    '129': '방송서비스',
    '130': '인터넷',
    '131': '디지털컨텐츠',
    '132': '소프트웨어',
    '133': '컴퓨터서비스',
    '134': '통신장비',
    '135': '정보기기',
    '136': '반도체',
    '137': 'IT 부품',
    '138': 'KOSDAQ 100',
    '139': 'KOSDAQ MID 300',
    '140': 'KOSDAQ SMALL',
    '141': '오락문화',
    '142': '코스닥 우량기업',
    '143': '코스닥 벤처기업',
    '144': '코스닥 중견기업',
    '145': '코스닥 신성장기업',
    '150': 'KOSDAQ 150',
    '160': 'F-KOSDAQ150',
    '165': 'F-KOSDAQ150인버스',
    '201': 'KOSPI200',
    '207': 'F-KOSPI200',
    '208': 'F-KOSPI200인버스',
    '209': '레버리지KOSPI200',
    '210': 'F-KOSPI200레버리지',
    '211': '건설',
    '212': '중공업',
    '213': '철강소재',
    '214': '에너지화학',
    '215': '정보통신',
    '216': '금융',
    '217': '생활소비재',
    '218': '경기소비재',
    '219': '산업재',
    '220': '헬스케어',
    '224': '에너지화학레버리지',
    '225': '정보기술레버리지',
    '226': '금융레버리지',
    '227': '경기소비재레버리지',
    '250': 'F-KOSPI200 Plus',
    '251': 'K200 USD F BuySell',
    '252': 'USD K200 F BuySell',
    '253': 'K200 F 매수 콜매도',
    '254': 'K200 F 매도 풋매도',
    '255': 'K200 중소형주',
    '256': 'K200 SF레버리지1.5X',
    '401': 'KOSPI100',
    '402': 'KOSPI50',
    '701': 'KRX100',
    '702': 'KRX자동차',
    '703': 'KRX반도체',
    '704': 'KRX바이오',
    '705': 'KRX금융',
    '706': 'KRX경기소비재',
    '707': 'KRX에너지화학',
    '708': 'KRX철강',
    '709': 'KRX필수소비재',
    '710': 'KRX방송통신',
    '711': 'KRX건설',
    '713': 'KRX증권',
    '714': 'KRX기계장비',
    '715': 'KRX보험',
    '716': 'KRX운송',
    '717': 'KRX유틸리티',
    '718': 'KRX미디어&엔터테인',
    '719': 'KRX정보기술',
    '730': 'KTOP 30',
    '731': 'KTOP30레버리지',
    '750': 'KRXESG리더스150',
    '770': '국채선물대표(F-KTB)',
    '771': 'KRX300'
}

# Event Slots
events = [
    'on_event_connect',
    'on_receive_msg',
    'on_receive_tr_data',
    'on_receive_real_data',
    'on_receive_chejan_data',
    'on_receive_condition_ver',
    'on_receive_tr_condition',
    'on_receive_real_condition'
]


def is_valid_event(event):
    """
    Returns True if event is valid, else False.

    :param event: str
        One of the pre-defined event names in string.
    :return: bool
    """
    if event not in events:
        print(f"{event} is not a valid event.\nSelect one of {events}.")
        return False
    return True


# 시장
markets = {
    '0': 'KOSPI',
    '3': 'ELW',
    '4': '뮤추얼펀드',
    '5': '신주인수권',
    '6': '리츠',
    '8': 'ETF',
    '9': '하이일드펀드',
    '10': 'KOSDAQ',
    '30': 'K-OTC',
    '50': 'KONEX',
    '60': 'ETN'
}


# 시장구분
market_gubuns = {
    '0': 'KOSPI',
    '1': 'KOSDAQ',
    '2': 'KOSPI200',
    '4': 'KOSPI100(150)',
    '7': 'KRX100'
}


# 업종
sectors = {
    '001': '종합(KOSPI)',
    '002': '대형주',
    '003': '중형주',
    '004': '소형주',
    '005': '음식료업',
    '006': '섬유의복',
    '007': '종이목재',
    '008': '화학',
    '009': '의약품',
    '010': '비금속광물',
    '011': '철강금속',
    '012': '기계',
    '013': '전기전자',
    '014': '의료정밀',
    '015': '운수장비',
    '016': '유통업',
    '017': '전기가스업',
    '018': '건설업',
    '019': '운수창고',
    '020': '통신업',
    '021': '금융업',
    '022': '은행',
    '024': '증권',
    '025': '보험',
    '026': '서비스업',
    '027': '제조업',
    '603': '변동성지수',
    '604': '코스피고배당50',
    '605': '코스피배당성장50',
    '101': '종합(KOSDAQ)',
    '103': '기타서비스',
    '104': '코스닥IT종합',
    '106': '제조',
    '107': '건설',
    '108': '유통',
    '110': '운송',
    '111': '금융',
    '112': '통신방송서비스',
    '113': 'IT S/W & SVC',
    '114': 'IT H/W',
    '115': '음식료/담배',
    '116': '섬유/의류',
    '117': '종이/목재',
    '118': '출판/매체복제',
    '119': '화학',
    '120': '제약',
    '121': '비금속',
    '122': '금속',
    '123': '기계/장비',
    '124': '일반전기전자',
    '125': '의료/정밀 기기',
    '126': '운송장비/부품',
    '127': '기타 제조',
    '128': '통신서비스',
    '129': '방송서비스',
    '130': '인터넷',
    '131': '디지털컨텐츠',
    '132': '소프트웨어',
    '133': '컴퓨터서비스',
    '134': '통신장비',
    '135': '정보기기',
    '136': '반도체',
    '137': 'IT 부품',
    '138': 'KOSDAQ 100',
    '139': 'KOSDAQ MID 300',
    '140': 'KOSDAQ SMALL',
    '141': '오락문화',
    '142': '코스닥 우량기업',
    '143': '코스닥 벤처기업',
    '144': '코스닥 중견기업',
    '145': '코스닥 신성장기업',
    '150': 'KOSDAQ 150',
    '160': 'F-KOSDAQ150',
    '165': 'F-KOSDAQ150인버스',
    '201': 'KOSPI200',
    '207': 'F-KOSPI200',
    '208': 'F-KOSPI200인버스',
    '209': '레버리지KOSPI200',
    '210': 'F-KOSPI200레버리지',
    '211': '건설',
    '212': '중공업',
    '213': '철강소재',
    '214': '에너지화학',
    '215': '정보통신',
    '216': '금융',
    '217': '생활소비재',
    '218': '경기소비재',
    '219': '산업재',
    '220': '헬스케어',
    '224': '에너지화학레버리지',
    '225': '정보기술레버리지',
    '226': '금융레버리지',
    '227': '경기소비재레버리지',
    '250': 'F-KOSPI200 Plus',
    '251': 'K200 USD F BuySell',
    '252': 'USD K200 F BuySell',
    '253': 'K200 F 매수 콜매도',
    '254': 'K200 F 매도 풋매도',
    '255': 'K200 중소형주',
    '256': 'K200 SF레버리지1.5X',
    '401': 'KOSPI100',
    '402': 'KOSPI50',
    '701': 'KRX100',
    '702': 'KRX자동차',
    '703': 'KRX반도체',
    '704': 'KRX바이오',
    '705': 'KRX금융',
    '706': 'KRX경기소비재',
    '707': 'KRX에너지화학',
    '708': 'KRX철강',
    '709': 'KRX필수소비재',
    '710': 'KRX방송통신',
    '711': 'KRX건설',
    '713': 'KRX증권',
    '714': 'KRX기계장비',
    '715': 'KRX보험',
    '716': 'KRX운송',
    '717': 'KRX유틸리티',
    '718': 'KRX미디어&엔터테인',
    '719': 'KRX정보기술',
    '730': 'KTOP 30',
    '731': 'KTOP30레버리지',
    '750': 'KRXESG리더스150',
    '770': '국채선물대표(F-KTB)',
    '771': 'KRX300'
}

# Event Slots Returns True if event is valid, else False.      :param event: str         One of the pre-defined event names in string.     :return: bool # 시장 # 시장구분 # 업종