# -*- coding: utf-8 -*-
# !/usr/bin/env python
# Software: PyCharm
# __author__ == "YU HAIPENG"
# Month: 七月
""" Write an introduction to the module here """
import math
import re

import math
import re


def convert_currency_to_float(text):
    """
    大写金额转小写金额
    :param text:
    :return:
    """
    for i in (("万万", "亿"), ("点", "元"), ("块", "元"), ("毛", "角"), (" ", '')):
        text = text.replace(i[0], i[1])
    v_result = 0
    v_number = 0  # 当前数字
    v_temp = 0
    v_decimal = 0  # 是否出现小数点

    text = re.sub(
        r"[^两二四五十角亿百幺叁千分捌七陆万仟伍整一八肆拾壹柒佰贰元六玖三九零]",
        '',
        text
    )
    if text.startswith("元"):
        text = text[1:]
    for char in text:
        i = "零一二三四五六七八九".find(char)
        if i < 0:
            i = "零幺两三四五六七八九".find(char)
        if i < 0:
            i = "零壹贰叁肆伍陆柒捌玖".find(char)
        if i > 0:
            v_number = i
            if v_decimal > 0:
                v_result += v_number * math.pow(10, -v_decimal)
                v_decimal += 1
                v_number = 0
        else:
            i = "元十百千万亿".find(char)
            if i < 0:
                i = "整拾佰仟万亿".find(char)
            if i == 5:
                i = 8
            if i > 0:
                if i >= 4:
                    v_temp += v_number
                    if v_temp == 0:
                        v_temp = 1
                    v_result += v_temp * math.pow(10, i)
                    v_temp = 0
                else:
                    v_temp += v_number * math.pow(10, i)
            else:
                i = "元角分".find(char)
                if i > 0:
                    v_temp += v_number
                    v_result += v_temp * math.pow(10, - i)
                    v_temp = 0
                elif i == 0:
                    v_temp += v_number
                    v_result += v_temp
                    v_decimal = 1
                    v_temp = 0
            v_number = 0
    return round(v_result + v_temp + v_number, 3)


def convert_currency_to_string(text_number):
    """
    数字转人民币大写
    :param text_number:
    :return:
    """
    maximum_number = 99999999999.99
    text_number = str(text_number)
    if re.match(r"[^,.\d]", text_number):
        raise ValueError("小写金额含有无效字符!")
    if not re.match(
            r"^((\d{1,3}(,\d{3})*(.((\d{3},)*\d{1,3}))?)|(\d+(.\d+)?))$",
            text_number):
        raise ValueError("小写金额的格式不正确!")
    for x in ((',', ""), ("^0+", '')):
        text_number = re.sub(x[0], x[1], text_number)
    if text_number == "":
        return "零元"
    if float(text_number) > maximum_number:
        raise ValueError("金额过大,应小于1000亿元!")
    parts = text_number.split(".")
    if len(parts) > 1:
        integral = parts[0]
        decimal = parts[1]
        decimal = decimal[0: 2]
    else:
        integral = parts[0]
        decimal = ""
    digits = ("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖")
    rce = ("", "拾", "佰", "仟")
    big_rce = ("", "万", "亿")
    decimals = ("角", "分")
    output_characters = ''
    if float(integral) > 0:
        zero_count = 0
        for i in range(len(integral)):
            p = len(integral) - i - 1
            d = integral[i]
            quotient = p / 4
            modulus = p % 4
            if str(d) == '0':
                zero_count += 1
            else:
                if zero_count > 0:
                    output_characters += digits[0]
                zero_count = 0
                output_characters += digits[int(d)] + rce[modulus]
            if modulus == 0 and zero_count < 4:
                output_characters += big_rce[int(quotient)]
                zero_count = 0
        output_characters += "元"
        if decimal != "":
            for i in range(len(decimal)):
                d = decimal[i]
                if d != '0':
                    output_characters += digits[int(d)] + decimals[i]

        else:
            output_characters += "整"
        return output_characters