from datetime import tzinfo

from . import Hf
from ..he import He
from ..hi import Hi


class Number(He, float):
    CN_INTEGER_0_TO_9 = '零壹贰叁肆伍陆柒捌玖'
    CN_POINTS_UNITS = '角分厘毫丝'
    CN_DECIMAL_4S_UNITS = '万亿兆京垓秭穰沟涧正载极'
    CN_DECIMAL_UNITS = '拾佰仟'

    CN_CURRENCY_UNIT = "圆"
    CN_POINT_NAME = '点'
    CN_ONLY_NAME = '整'
    CN_CNY_NAME = '人民币'
    CN_USD_NAME = '美元'
    CN_EUR_NAME = '欧元'
    CN_MINUS = '负'

    EN_CNY_NAME = 'Say Chinese Yuan'
    EN_USD_NAME = 'Say U.S.Dollar'
    EN_EUR_NAME = 'Say Euro'
    EN_ONLY_NAME = 'Only'
    EN_POINT_NAME = 'Point'
    EN_AND_NAME = 'and'
    EN_MINUS = 'Minus'

    EN_INTEGER_0_TO_9 = ['Zero', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine']
    EN_INTEGER_1NS = ['Ten', 'Eleven', 'Twelve', 'Thirteen', 'Fourteen', 'Fifteen', 'Sixteen', 'Seventeen',
                      'Eighteen', 'Nineteen']
    EN_INTEGER_2NS = ['Twenty', 'Thirty', 'Forty', 'Fifty', 'Sixty', 'Seventy', 'Eighty', 'Ninety']
    EN_HUNDRED_NAME = 'Hundred'
    EN_DECIMAL_3S_UNITS = ['Thousand', 'Million', 'Billion', 'Trillion', 'Quadrillion', 'Quintillion', 'Sextillion',
                           'Septillion', 'Octillion', 'Nonillion', 'Decillion']
    EN_POINTS_UNITS = ['Dime', 'Cent', 'Mill']

    WEIGHT_UNIT_KGS = 'Kgs'
    CN_WEIGHT_UNIT_KGS = '公斤'
    EN_WEIGHT_UNIT_KGS = 'Kilograms'

    LENGTH_UNIT_MM = 'mm'
    CN_LENGTH_UNIT_MM = '毫米'
    EN_LENGTH_UNIT_MM = 'Millimetres'

    LENGTH_UNIT_M = 'm'
    CN_LENGTH_UNIT_M = '米'
    EN_LENGTH_UNIT_M = 'Metres'

    LENGTH_UNIT_CM = 'cm'
    CN_LENGTH_UNIT_CM = '厘米'
    EN_LENGTH_UNIT_CM = 'Centimeters'


    @property
    def is_int(self) -> bool: ...
    def is_positive(self) -> bool: ...
    def is_negative(self) -> bool: ...
    def is_zero(self) -> bool: ...

    def round(self, digits: int = 0)-> Hf | Hi: ...
    def ceil(self, digits: int = 0)-> Hf | Hi: ...
    def floor(self, digits: int = 0)-> Hf | Hi: ...
    @property
    def integer_part(self)-> str: ...
    @property
    def ___integer_part_breaks___(self)-> dict[int, list[str]]: ...
    def integer_part_breaks(self, step: int)-> list[str]: ...
    @property
    def ___integer_part_strict_breaks___(self)-> dict[int, list[str]]: ...
    def integer_part_strict_breaks(self, step: int)-> list[str]: ...
    @property
    def integer_part_myriad_breaks(self)-> list[str]: ...
    @property
    def integer_part_myriad_strict_breaks(self)-> list[str]: ...
    @property
    def integer_part_thousand_breaks(self)-> list[str]: ...
    @property
    def integer_part_thousand_strict_breaks(self)-> list[str]: ...
    @property
    def decimal_part(self)-> str: ...
    ####################################################################################################
    def round_format(self, digits: int = 0, force_digits: bool = None, integer_breaks: int = 3)-> str: ...
    ####################################################################################################
    def year(self, tz: tzinfo = None)-> int: ...
    def month(self, tz: tzinfo = None)-> int: ...
    def day(self, tz: tzinfo = None)-> int: ...
    def hour(self, tz: tzinfo = None)-> int: ...
    def minute(self, tz: tzinfo = None)-> int: ...
    def second(self, tz: tzinfo = None)-> int: ...
    def format_yy(self, tz: tzinfo = None)-> str: ...
    def format_m(self, tz: tzinfo = None)-> str: ...
    def format_d(self, tz: tzinfo = None)-> str: ...
    def format_h(self, tz: tzinfo = None)-> str: ...
    def format_i(self, tz: tzinfo = None)-> str: ...
    def format_s(self, tz: tzinfo = None)-> str: ...
    def format_yyyy(self, tz: tzinfo = None)-> str: ...
    def format_mm(self, tz: tzinfo = None)-> str: ...
    def format_dd(self, tz: tzinfo = None)-> str: ...
    def format_hh(self, tz: tzinfo = None)-> str: ...
    def format_ii(self, tz: tzinfo = None)-> str: ...
    def format_ss(self, tz: tzinfo = None)-> str: ...

    def format_yymd(self, tz: tzinfo = None, delimiter='-')-> str: ...
    def format_his(self, tz: tzinfo = None, delimiter=':')-> str: ...
    def format_yymdhis(self, tz: tzinfo = None, delimiter=' ', date_delimiter='-', time_delimiter=':')-> str: ...
    def format_yyyymmdd(self, tz: tzinfo = None, delimiter='-')-> str: ...
    def format_hhiiss(self, tz: tzinfo = None, delimiter=':')-> str: ...
    def format_yyyymmddhhiiss(self, tz: tzinfo = None, delimiter=' ', date_delimiter='-', time_delimiter=':')-> str: ...


    ####################################################################################################
    # 以下数字转化为大写
    ####################################################################################################
    @property
    def cn_decimal_part(self) -> str: ...
    """def ___integer_myriad_breaks___(self) -> list: ...
    def ___integer_myriad_strict_breaks___(self) -> list: ...
    def ___integer_thousand_breaks___(self) -> list: ...
    def ___integer_thousand_strict_breaks___(self) -> list: ..."""
    def _capitalized_myriad_breaks_number_to_cn(self, group_sn, num_sn): ...
    @property
    def cn_integer_part(self) -> str: ...
    @property
    def cn_number(self) -> str: ...
    @property
    def cn_money(self) -> str: ...
    @property
    def cn_cny(self) -> str: ...
    @property
    def cn_usd(self) -> str: ...
    @property
    def cn_eur(self) -> str: ...
    @property
    def en_decimal_part(self) -> str: ...
    def _capitalized_en_by_thousands_breaks_add_and(self, group_sn, num_sn): ...
    def _capitalized_en_by_thousands_breaks(self, group_sn): ...
    def _capitalized_en_by_thousands_breaks_2(self, group_sn): ...
    def _capitalized_en_by_thousands_breaks_1(self, group_sn): ...
    @property
    def en_integer_part(self) -> str: ...
    @property
    def en_number(self) -> str: ...
    @property
    def en_money(self) -> str: ...
    @property
    def en_cny(self) -> str: ...
    @property
    def en_usd(self) -> str: ...
    @property
    def en_eur(self) -> str: ...
