import secrets, string


class gen:
    def license_key(slef):
        return '-'.join(
            ''.join(secrets.choice(string.ascii_letters + string.digits) for _ in range(secrets.randbelow(4) + 3)) for _
            in
            range(6))[:-1]

    def license_key_v2(self, min_part_length=3, max_part_length=6, num_parts=6, separator='-', total_length=None,
                       total_separators=None):
        if total_separators is not None:
            num_parts = total_separators + 1

        # Generate the parts with random lengths
        parts = [
            ''.join(secrets.choice(string.ascii_letters + string.digits)
                    for _ in range(secrets.randbelow(max_part_length - min_part_length + 1) + min_part_length))
            for _ in range(num_parts)
        ]

        # Join parts using the specified separator
        key = separator.join(parts)

        # If total_length is specified and greater than current length, add random characters
        if total_length is not None and len(key) < total_length:
            additional_chars = ''.join(secrets.choice(string.ascii_letters + string.digits)
                                       for _ in range(total_length - len(key)))
            key += additional_chars

        return key

    """
    パラメータ
    min_part_length (int): 各部分の最小長さを指定します。デフォルトは3です。
    max_part_length (int): 各部分の最大長さを指定します。デフォルトは6です。
    num_parts (int): ライセンスキーの部分の数を指定します。デフォルトは6です。
    separator (str): 部分間のセパレーターを指定します。デフォルトは '-' です。
    total_length (int): ライセンスキーの総文字数を指定します。デフォルトは None（指定なし）です。
    total_separators (int): ライセンスキーのセパレーターの数を指定します。デフォルトは None（指定なし）です。このオプションを指定すると、num_parts は total_separators + 1 に設定されます。
    
    戻り値
    str: 生成されたライセンスキーを返します。
    """
