'''
主程序：整合各个模块
1、ui文件调用相应ui模块
2、get_params.py获取参数
3、get_answer.py获取答案
4、cloud.py将json文件存入云端
'''
# 生成图形化界面，引导用户登陆并输入实训网址
# 调用get_params.py获取参数，这一步同时隐含了云端获取答案的过程
# 如果云端答案不存在，则调用get_answer.py获取答案，并展示给用户
# 用户verif选项确认后，调用cloud.py将json文件存入云端
# 导入所需模块
from cloud import upload,download,is_exist
print('处理api相关中...')
download('apis.json')
print('处理完成！')
from get_params import get_parameters,get_parameters_of_programming,is_practice
from get_answer import get_shixunanswer_from_api,get_programming_answer_from_api,client,rewrite_programming_json,rewrite_shixun_json
from login_ui import show_login,show_image,MyApp
from trans_to_txt import transToTxt,transToTxt_programming,get_programmingjson,get_shixunjson
import json
import os
from printtxt import print_txt,get_all_txt_file
global finished
finished = False
# 调用login_ui获得用户输入的用户名、密码和实训网址
show_image()
show_login()
promot1 = '实训'
promot2 = '编程'
# 检查userinfo.json文件是否存在，存在，则程序继续
assert os.path.exists('userinfo.json'), 'userinfo.json文件不存在,请检查'

# 先读取userinfo.json文件，获得用户名、密码和实训网址
with open('userinfo.json', 'r') as f:
    userinfo = json.load(f)
user_name = userinfo['name']
password = userinfo['pwd']
url = userinfo['url']
ispractice = is_practice(url=url)
if ispractice:
    # 调用get_params.py获得参数，完成后本地应该有一个json文件，里面有参数
    get_parameters(url,user_name,password)
else:
    get_parameters_of_programming(url=url,user_name=user_name,password=password)
print('参数获取完成！')
# 获得刚才get_params.py生成的json文件名
def is_exist_answer(data:dict) -> bool:
    for i,j in data.items():
        if 'answer' in j.keys():
            return True
    return False
def is_exist_answer_programming(data:dict) -> bool:
    for i in data.keys():
        if i == 'answer':
            continue
        else:
            return False
    return True
if ispractice:
    j_name = get_shixunjson(os.getcwd())[0]
    # 判断j_name文件中是否有answer
    with open(j_name,'r',encoding='utf-8') as f:
        json_data = json.load(f)
    if is_exist_answer(json_data):
        pass
    else:
        print('调用api获取答案中，请耐心等待...')
        new_data = get_shixunanswer_from_api(jsonfile=json_data,client=client,promot=promot1)
        # 重写本地json文件
        rewrite_shixun_json(json_name=j_name,new_data=new_data)
else:
    j_names = get_programmingjson(os.getcwd())
    # 判断是否有answer
    for j in j_names:
        with open(j,'r',encoding='utf-8') as f1:
            j_data = json.load(f1)
        if not is_exist_answer_programming(j_data):
            break
    print('调用api获取答案中，请耐心等待...')
    new_data = get_programming_answer_from_api(jsonfile=j_names,client=client,promot=promot2)
    # 重写本地接送文件
    rewrite_programming_json(json_names=j_names,new_data=new_data)

# 上面的判断执行完后，本地的json文件中已经有answer了，下面实现信息展示
# 先删除本地api.json文件
os.remove('apis.json')
# 函数读取当前目录下的所有json文件
if ispractice:
    JSS = get_shixunjson(os.getcwd())[0]
    # 构建txt文件
    transToTxt(JSS)
    # 展示txt文件
    # 判断云端是否存在答案json，如果不存在，则上传
    print('答案获取完毕，开始展示')
    print_txt(get_all_txt_file(os.getcwd()))
    if not is_exist(JSS):
        print('开始上传答案到云端,请勿关闭程序')
        upload(JSS)
        print('上传完毕')
else:
    JSS = get_programmingjson(os.getcwd())
    transToTxt_programming(JSS)
    print('答案获取完毕，开始展示')
    print_txt(get_all_txt_file(os.getcwd()))
    if not is_exist(JSS):
        print('开始上传答案到云端,请勿关闭程序')
        for i in JSS:
            upload(i)
        print('上传完毕')
# #打印完，删除本地txt和json文件
def getalljsons() -> list:
    return [i for i in os.listdir() if i.endswith('.json')]
for i in getalljsons():
    os.remove(i)
# 删除本地所有数字命名的txt文件
for i in os.listdir():
    if i.split('.')[0].isdigit() or i.startswith('pro') and i.endswith('.txt'):
        os.remove(i)
