from __init__ import User
import logging
import session
import error
import random
import string
import jwt
import time

#Users类,包括注册登录
class Users(session.ORMsession):
    token_lifetime: int = 60

    def __init__(self):
        session.ORMsession.__init__(self)

    def register(self,user_id:str,password:str) -> (int,str):
        try:
            if(len(password)==0):
                return 202,"error"
            user=User(user_id=user_id,password=password)
            self.db_session.add(user)
            self.db_session.commit()
        except:
            return error.error_exist_user_id(user_id)
        return 200,"ok"

    def unregister(self, user_id: str, password: str) -> (int, str):
        try:
            code, message = self.check_password(user_id, password)
            if code != 200:
                return code, message
            user = self.db_session.query(User).filter(User.user_id==user_id).first()
            self.db_session.delete(user)
            self.db_session.commit()
        except:
            return error.error_authorization_fail()
        return 200, "ok"

    def check_password(self, user_id: str, password: str) -> (int, str):
        user = self.db_session.query(User).filter(User.user_id==user_id).first()
        if user is None:
            return error.error_authorization_fail()
        if password != user.password:
            return error.error_authorization_fail()
        return 200, "ok"

    def login(self, user_id: str, password: str) -> (int, str, str):
        try:
            code, message = self.check_password(user_id, password)
            if code != 200:
                return code, message
            self.db_session.commit()
        except:
            return error.error_authorization_fail()
        return 200, "ok"

    def change_password(self, user_id: str, old_password: str, new_password: str) -> (int,str):
        try:
            code, message = self.check_password(user_id, old_password)
            if code != 200:
                return code, message
            self.db_session.query(User).filter(User.user_id== user_id)\
                .update({'password': new_password})
            self.db_session.commit()
        except:
            return error.error_authorization_fail()
        return 200, "ok"