package com.gamedog.vididin.features.withdraw

object BankUtil {

    /**
     * 验证输入的巴西CPF号码是否合法。
     *
     * @param cpf 待验证的CPF字符串，可以包含分隔符（如 XXX.XXX.XXX-XX）或仅为纯数字。
     * @return 如果CPF格式正确且校验码有效则返回true，否则返回false。
     */
    fun isValidCpf(cpf: String?): Boolean {
        if (cpf.isNullOrBlank()) {
            return false
        }

        // 1. 提取纯数字
        val cleanCpf = cpf.replace("[^\\d]".toRegex(), "")

        // 2. 初步格式验证：必须是11位数字，且不能所有数字相同（如111.111.111-11）
        if (cleanCpf.length != 11 || cleanCpf.all { it == cleanCpf[0] }) {
            return false
        }

        // 3. 计算并验证第一个校验位
        val firstCheckDigit = calculateCheckDigit(cleanCpf, 9, 10)
        if (firstCheckDigit != cleanCpf[9].toString().toInt()) {
            return false
        }

        // 4. 计算并验证第二个校验位
        val secondCheckDigit = calculateCheckDigit(cleanCpf, 10, 11)
        return secondCheckDigit == cleanCpf[10].toString().toInt()
    }

    /**
     * 计算CPF的校验位。
     *
     * @param digits 纯数字的CPF字符串。
     * @param length 参与计算的前几位数字的长度。
     * @param weight 起始权重。
     * @return 计算出的校验位数字。
     */
    private fun calculateCheckDigit(digits: String, length: Int, weight: Int): Int {
        var sum = 0
        for (i in 0 until length) {
            sum += digits[i].toString().toInt() * (weight - i)
        }
        val remainder = sum % 11
        return if (remainder < 2) 0 else 11 - remainder
    }


    private fun executeWithDraw() {


    }


}