# -*- coding: utf-8 -*-
"""
Created on 2021-12-13 16:29:25
---------
@summary: 股票代码 code 格式化
---------
@author: yangyx01
"""
import re


def format_stock_code(x, special=""):
    """
    股票代码 code 格式化
    @param x:
    @param special:
    @return:
    """
    x = str(x)
    x = "".join(filter(str.isdigit, x))

    stock_len = 6
    hk_stock_len = 5
    if special:
        x = str(x)
        if "行业" in special or "概念" in special:
            x = x.zfill(stock_len) if len(x) < stock_len else x
            return '%s.TI' % x
        elif special == "港股":
            r = re.search(r"(\d+)", str(x), re.S | re.M)
            if not r:
                return x
            else:
                x = r.group(1)
                x = x.zfill(hk_stock_len) if len(x) < hk_stock_len else x
            return '%s.HK' % x
        elif special == "场外基金" or special == "热基":
            x = x.zfill(stock_len) if len(x) < stock_len else x
            return '%s.OF' % x
        elif special == "可转债":
            if str(x).startswith('11'):
                x = x.zfill(stock_len) if len(x) < stock_len else x
                return '%s.SH' % x
            elif str(x).startswith('12'):
                x = x.zfill(stock_len) if len(x) < stock_len else x
                return '%s.SZ' % x
    if not x[0].isdigit():
        return x.upper()
    if str(x[0:3]) in ['920'] or str(x[0]) in ['8', '4']:
        x = x.zfill(stock_len) if len(x) < stock_len else x
        return '%s.BJ' % x
    if str(x[0]) in ['5', '6'] or str(x[0:3]) in ['900']:
        x = x.zfill(stock_len) if len(x) < stock_len else x
        return '%s.SH' % x
    else:
        x = x.zfill(stock_len) if len(x) < stock_len else x
        return '%s.SZ' % x

def a_symbol_verify(x):
    l = str(x).upper().split(".")
    if not x[-1].isdigit():
        return True
    elif len(l) == 2:
        return True
    else:
        return False


def symbol_verify(x):
    ss = x.split(",")
    if len(ss) > 1:
        if a_symbol_verify(ss[0]):
            return x
        else:
            raise '请按照 "000001.SZ,000001.SZ,000001.SZ" 格式传入symbol'
    else:
        if a_symbol_verify(x):
            return x
        else:
            raise '请按照 "000001.SZ" 格式传入symbol'


def verify_stock_or_index(x):
    """
    判断代码是否是 股票 True  指数 False
    @param x:
    @return:
    """
    x = str(x).upper()
    if x.startswith('39') and x.endswith('SZ'):
        return True
    elif x.startswith('30') and x.endswith('SZ'):
        return True
    elif x.startswith('0') and x.endswith('SH'):
        return False
    elif x.startswith('0') and x.endswith('SZ'):
        return True
    elif x.endswith("SH"):
        return False
    # elif x.startswith('6') and x.endswith('SH'):
    #     return True
    elif x.startswith('8') and x.endswith('BJ'):
        return True
    elif x.startswith('4') and x.endswith('BJ'):
        return True
    elif x.startswith('920') and x.endswith('BJ'):
        return True
    elif x.startswith('9') and x.endswith('CSI'):
        return False
    else:
        return True


if __name__ == '__main__':
    # s = symbol_verify("13.SH")
    # # s = symbol_verify("sh13")
    # s = symbol_verify("sz000001")
    # s = symbol_verify("000001.SZ")
    # s = symbols_f("000001", special="港股")
    # s = verify_stock_or_index(x="399005.SZ")
    s = format_stock_code(x="sz92052")
    print(s)
