import random
import time
import pymysql
import re

host = '121.4.180.183'  # 连接名称，默认127.0.0.1
user = 'study'  # 用户名
passwd = 'Bu!&Cre6h@pR%S'  # 密码
port = 3306  # 端口，默认为3306
db = 'study'  # 数据库名称
charset = 'utf8mb4'  # 字符编码

quantity = 20


def test_link():
    try:
        # 连接数据库
        conn = pymysql.connect(host=host, user=user, passwd=passwd, port=port, db=db, charset=charset)

        # 连接成功
        print("Connected to MySQL database successfully!")

        # 可以在此处执行数据库操作

        # 关闭连接
        conn.close()

    except pymysql.Error as e:
        # 连接失败，打印异常信息
        print("Failed to connect to MySQL database:", e)
        time.sleep(3)
        exit(1)


def detection_work_day():
    conn = pymysql.connect(host=host, user=user, passwd=passwd, port=port, db=db, charset=charset)

    cursor = conn.cursor()

    cursor.execute('delete from Mistake WHERE Date != CURDATE();')
    cursor.execute('SELECT Date FROM Mistake WHERE Date = CURDATE();')

    rows = cursor.fetchall()
    if len(rows) < quantity:
        cursor.execute('SELECT English,Chinese FROM Work where frequency = 0;')
        work = cursor.fetchall()
        i = 0
        works = []
        while i < (quantity - len(rows)):
            test = random.choice(work)
            if test[0] not in works:
                English = test[0]
                Chinese = test[1]
                works.append(English)
                cursor.execute('insert into Mistake(English, Chinese)\n'
                               f"values ('{English}','{Chinese}')")
                cursor.execute(f"update Work set frequency = frequency+1 where English='{English}'")
                conn.commit()
                i += 1

    cursor.close()
    conn.close()


def add_error(english):
    conn = pymysql.connect(host=host, user=user, passwd=passwd, port=port, db=db, charset=charset)

    cursor = conn.cursor()

    cursor.execute(f"update Work set erred = erred+1 where English='{english}'")

    conn.commit()

    cursor.close()
    conn.close()


def read_work_day():
    conn = pymysql.connect(host=host, user=user, passwd=passwd, port=port, db=db, charset=charset)

    cursor = conn.cursor()

    cursor.execute('SELECT English, Chinese FROM Mistake WHERE Date = CURDATE();')

    rows = cursor.fetchall()

    cursor.close()
    conn.close()

    return rows


def study_day(work_day):
    i = 0
    while i < quantity:
        print("-" * 20)
        print(f"第{i + 1}个")
        print("English\t:\t" + work_day[i][0])
        print("Chinese\t:\t" + work_day[i][1])
        print("-" * 20)
        j = 0
        while j < 3:
            english = input("请输入单词:")
            chinese = input("请输入意思:")
            if english == work_day[i][0] and chinese == work_day[i][1]:
                print("输入正确")
                j += 1
            else:
                if english != work_day[i][0]:
                    print("单词输入错误")
                if chinese != work_day[i][1]:
                    print("意思输入错误")
                j = 0
            print(f"\n还需要输入{3 - j}次")
        i += 1


def detection_day(work_day):
    for i in range(quantity):
        pick = random.randint(1, 2)
        if pick == 1:
            print("-" * 20)
            print(f"第{i + 1}个")
            print("English\t:\t" + work_day[i][0])
            print("-" * 20)
            Chinese = input("请输入意思:")
            if Chinese == work_day[i][1]:
                print("恭喜你答对了")
            else:
                print(f"正确答案应该是\t{work_day[i][1]}")
                add_error(work_day[i][0])
        else:
            print("-" * 20)
            print(f"第{i + 1}个")
            print("Chinese\t:\t" + work_day[i][1])
            print("-" * 20)
            English = input("请输入单词:")
            if English == work_day[i][0]:
                print("恭喜你答对了")
            else:
                print(f"正确答案应该是\t{work_day[i][0]}")
                add_error(work_day[i][0])
        i += 1


def detection_random():
    conn = pymysql.connect(host=host, user=user, passwd=passwd, port=port, db=db, charset=charset)

    cursor = conn.cursor()

    cursor.execute('select English,Chinese from Work')

    rows = cursor.fetchall()

    works = []
    for _ in range(quantity):
        works.append(random.choice(rows))

    cursor.close()
    conn.close()
    detection_day(works)


def revise_work():
    conn = pymysql.connect(host=host, user=user, passwd=passwd, port=port, db=db, charset=charset)
    chines_pick = re.compile(r'^[\u4e00-\u9fa5]+$')
    english_pick = re.compile(r'^[a-zA-Z]+$')
    number_pick = re.compile(r'^[0-9]+$')
    cursor = conn.cursor()


    print("\n1.增加单词")
    print('2.删除单词')
    print('3.查询单词')
    pick = input("请输入:")
    match pick:
        case '1':
            English = input("请输入单词:")
            while not bool(english_pick.fullmatch(English)):
                English = input("请输入单词:")

            Chinese = input("请输入意思:")
            while not bool(chines_pick.fullmatch(Chinese)):
                Chinese = input("请输入意思:")

            try:
                cursor.execute('insert into Work(english, chinese)\n'
                               f"values('{English}','{Chinese}')")
            except:
                cursor.execute(f"select English ,chinese from Work where English='{English}';")
                data = cursor.fetchall()
                if len(data) == 0:
                    print("\n未知错误\n")
                else:
                    print("\n数据已经存在")
                    data = data[0]
                    print(f"English:{data[0]}")
                    print(f"Chinese:{data[1]}\n")
            else:
                conn.commit()
                print(f"\n添加成功 values('{English}','{Chinese}')\n")
        case '2':
            English = input("请输入单词:")
            while not bool(english_pick.fullmatch(English)):
                English = input("请输入单词:")
            cursor.execute(f"select English from Work where English='{English}';")
            data = cursor.fetchall()
            if len(data) == 0:
                print("\n没有查到此单词\n")
            else:
                cursor.execute(f"delete from Work where English='{English}';")
                conn.commit()
                print(f"\n{English}删除成功\n")
        case '3':
            English = input("请输入单词:")
            while not bool(english_pick.fullmatch(English)):
                English = input("请输入单词:")
            cursor.execute(f"select English ,chinese from Work where English='{English}';")
            data = cursor.fetchall()
            if len(data) == 0:
                print("\n没有查到此单词\n")
            else:
                for work in data:
                    print(f"\nEnglish:{work[0]}")
                    print(f"Chinese:{work[1]}\n")



    cursor.close()
    conn.close()


test_link()
detection_work_day()
work_day = read_work_day()
pick = 0

while pick != 'exit':
    print("1.每日学习")
    print("2.每日检测")
    print("3.随机检测")
    print("4.修改单词")
    print('exit 退出')
    pick = input("请输入需要进入的模式:")
    match pick:
        case '1':
            study_day(work_day)
        case '2':
            detection_day(work_day)
        case '3':
            detection_random()
        case '4':
            revise_work()
