from PIL import Image, ImageDraw, ImageFont
import io
import os
import random
import base64


class CaptchaService:
    """
    验证码模块服务层
    """

    @classmethod
    def create_captcha_image_service(cls):
        # 创建空白图像
        image = Image.new('RGB', (400, 300), color='#EAEAEA')

        # 创建绘图对象
        draw = ImageDraw.Draw(image)

        # 设置字体
        font = ImageFont.truetype(os.path.join(os.path.abspath(os.getcwd()), 'assets', 'font', 'Arial.ttf'), size=100)

        # 生成两个0-9之间的随机整数
        num1 = random.randint(0, 9)
        num2 = random.randint(0, 9)
        # 从运算符列表中随机选择一个
        operational_character_list = ['+', '-', '*']
        operational_character = random.choice(operational_character_list)
        # 根据选择的运算符进行计算
        if operational_character == '+':
            result = num1 + num2
        elif operational_character == '-':
            result = num1 - num2
        else:
            result = num1 * num2
        # 绘制文本
        text = f"{num1} {operational_character} {num2} = ?"
        draw.text((10, 120), text, fill='blue', font=font)

        # 将图像数据保存到内存中
        buffer = io.BytesIO()
        image.save(buffer, format='PNG')

        # 将图像数据转换为base64字符串
        base64_string = f'data:image/png;base64,{base64.b64encode(buffer.getvalue()).decode()}'

        return [base64_string, result]
