from werkzeug.security import generate_password_hash, check_password_hash
from config.db import db
from models.user import User


class UserService:
    @staticmethod
    def create_user(name: str, email: str, password: str):
        user = User(id=None, name=name, email=email, password=generate_password_hash(password))
        db.session.add(user)
        db.session.commit()
        return user
    
    @staticmethod
    def get_user_by_id(user_id: int) -> User|None:
        return User.query.get(user_id)
    
    @staticmethod
    def list_users() -> list[User]:
        return User.query.all()
    
    @staticmethod
    def update_user(user_id: int, name: str, email: str) -> User|None:
        user: User = User.query.get(user_id)
        if not user:
            return None
        user.name = name
        user.email = email
        db.session.commit()
        return user
    
    @staticmethod
    def delete_user(user_id: int) -> tuple[bool, str]:
        user: User = User.query.get(user_id)
        if not user:
            return False, "User not found"
        db.session.delete(user)
        db.session.commit()
        return True, "User deleted"

    @staticmethod
    def login_user(email: str, password: str) -> User|None:
        result: User = User.query.filter_by(email=email).first()
        if not result:
            return None
        if not check_password_hash(result.password, password):
            return None
        return result
    