def remote_judge_create_submission(uuid: str,
                                   client_session_id: str,
                                   code: str,
                                   language: str,
                                   uid: int,
                                   hj2_problem_id: str,
                                   public: bool,
                                   message: str,
                                   contest_id: int = -1,
                                   contest_problem_id: int = -1):
    print(locals())
    """
    评测端向远程OJ提交代码成功后,创建相应的提交记录
    """
    if uuid not in config.JUDGERS:
        return make_response(-1, message="未认证评测机")
    import datetime
    if contest_id != -1:
        contest: Contest = Contest.by_id(contest_id)
        submission: Submission = Submission(
            uid=uid,
            language=language,
            problem_id=contest.problems[contest_problem_id]["id"],
            submit_time=datetime.datetime.now(),
            public=False,
            code=code,
            status="waiting",
            contest_id=contest_id)
    else:
        submission: Submission = Submission(
            uid=uid,
            language=language,
            problem_id=hj2_problem_id,
            submit_time=datetime.datetime.now(),
            public=public,
            code=code,
            status="waiting",
        )
    db.session.add(submission)
    db.session.commit()
    print("Submit done. ", submission.id)
    emit("server_response", {
        "ok": True,
        "data": {
            "submission_id": submission.id
        }
    },
         room=client_session_id,
         namespace="/ws/remote_judge")
    return make_response(0, data={"submission_id": submission.id})
def remote_judge_get_problem_info(problem_id: str,
                                  contest_id: int = -1,
                                  contest_problem_id: int = -1):
    """
    {
        "code":0,
        "data":{
            "isContest":"是否在比赛中",
            "problemData":{
                "title":"题目名",
                "content":"题目内容",
                "background":"题目背景",
                "inputFormat":"输入格式",
                "outputFormat":'输出格式',
                "examples":[{"input":"样例输入","output":"样例输出"}],
                "createTime":"创建时间",
                "uploaderProfile":{
                    "uid":"用户ID",
                    "username":"******"
                },
                "remoteProblemID":"远程题目ID",
                "remoteOJ":{
                    "id":"远程OJID",
                    "display":"远程OJ显示名",
                    "availableLanguages":[
                        {"id":"0","display":"C++"}
                    ]
                },
                "public":"是否公开",
                "hint":"提示",
                "recentDiscussions":[
                    {
                        "id":123,
                        "title":"qw"
                    }
                ],
                "acceptedCount":"",
                "submissionCount":""
            },
            "userData":{
                "lastCode":"上次提交的代码",
                "lastLanguage":"上次选择的语言",
                "status":"qwq",
                "id":"",
                "accounts":{
                    "id":{
                        "username":"******",
                        "oj":"OJ",
                        "accountID":"ID"
                    }
                }
            }
        }

    }
    """
    # in_contest = contest_id != -1
    contest: Contest = Contest.by_id(contest_id)

    if contest:
        # pass
        if not contest.running() and not permission_manager.has_permission(
                session.get("uid"), "contest.manage"):
            return make_response(-1, message="你没有权限查看此题目")
        print(contest_problem_id, "contest_problem_id")
        problem: Problem = db.session.query(Problem).filter(
            Problem.id == contest.problems[contest_problem_id]
            ["id"]).one_or_none()
    else:
        problem: Problem = db.session.query(Problem).filter(
            Problem.id == problem_id).one_or_none()
        if not permission_manager.has_permission(
                session.get("uid"),
                "remote_judge.use") and problem.uploader_id != int(
                    session.get("uid")):
            return make_response(-1, message="你没有权限查看该题目")

    if not problem:
        return make_response(-1, message="未知题目ID")
    if problem.problem_type != "remote_judge":
        return make_response(-1, message="此题目非远程评测题目")
    uploader: User = db.session.query(
        User.id, User.username).filter(User.id == problem.uploader_id).one()
    last_submission: Submission = db.session.query(Submission).filter(
        and_(Submission.problem_id == problem.id,
             Submission.uid == session.get("uid"))).order_by(
                 Submission.score.desc()).order_by(Submission.id.desc())
    last_code, last_language, submission_id, status = "", next(
        iter(config.REMOTE_JUDGE_OJS[problem.remote_judge_oj]
             ["availableLanguages"].keys())), -1, None
    if last_submission.count():
        last_submission = last_submission.first()
        last_code = last_submission.code
        last_language = last_submission.language
        status = last_submission.status
        submission_id = last_submission.id
    discussions = []
    discussions_query = db.session.query(
        Discussion.id, Discussion.title).filter(
            Discussion.path == f"discussion.problem.{problem.id}").order_by(
                Discussion.id.desc()).limit(5)
    for item in discussions_query:
        discussions.append({"id": item.id, "title": item.title})
    accounts = {}
    for item in db.session.query(
            RemoteAccount.account_id, RemoteAccount.username,
            RemoteAccount.oj).filter(
                and_(RemoteAccount.uid == session.get("uid", -1),
                     RemoteAccount.oj == problem.remote_judge_oj)):
        accounts[item.account_id] = {
            "username": item.username,
            "oj": config.REMOTE_JUDGE_OJS[item.oj]["display"],
            "accountID": item.account_id
        }
    return make_response(
        0,
        data={
            "isContest": contest is not None,
            "problemData": {
                "title":
                problem.title,
                "content":
                problem.content,
                "background":
                problem.background,
                "inputFormat":
                problem.input_format,
                "outputFormat":
                problem.output_format,
                "examples":
                problem.example,
                "createTime":
                problem.create_time,
                "uploaderProfile": {
                    "uid": uploader.id,
                    "username": uploader.username
                } if not contest else None,
                "remoteProblemID":
                problem.remote_problem_id if not contest else None,
                "remoteOJ": {
                    "id": problem.remote_judge_oj,
                    **config.REMOTE_JUDGE_OJS[problem.remote_judge_oj]
                },
                "public":
                problem.public if not contest else None,
                "hint":
                problem.hint,
                "recentDiscussions":
                discussions if not contest else None,
                "acceptedCount":
                db.session.query(Submission).filter(
                    Submission.problem_id == problem.id).filter(
                        Submission.status == "accepted").count()
                if not contest else None,
                "submissionCount":
                db.session.query(Submission).filter(
                    Submission.problem_id == problem.id).count()
                if not contest else None,
                "id":
                problem.id
            },
            "userData": {
                "lastCode":
                last_code,
                "lastLanguage":
                last_language,
                "status":
                status,
                "id":
                submission_id,
                "managable":
                permission_manager.has_permission(session.get("uid", None),
                                                  "problem.manage"),
                "accounts":
                accounts
            }
        })