"""
=========================================
CV6 AI Trading OS
User Repository
=========================================
"""

from sqlalchemy.orm import Session
from app.models.user import User


class UserRepository:

    def __init__(self, db: Session):
        self.db = db

    def create_user(self, name: str, email: str, password: str):
        user = User(
            name=name,
            email=email,
            password=password
        )

        self.db.add(user)
        self.db.commit()
        self.db.refresh(user)

        return user

    def get_by_email(self, email: str):
        return (
            self.db.query(User)
            .filter(User.email == email)
            .first()
        )

    def get_by_id(self, user_id: int):
        return (
            self.db.query(User)
            .filter(User.id == user_id)
            .first()
        )

    def get_all_users(self):
        return self.db.query(User).all()

    def delete_user(self, user_id: int):
        user = self.get_by_id(user_id)

        if user:
            self.db.delete(user)
            self.db.commit()

        return user


# ==========================================
# Helper Functions
# ==========================================

def get_user_by_email(db: Session, email: str):
    """
    Used by auth_api.py
    """
    repo = UserRepository(db)
    return repo.get_by_email(email)


def get_user_by_id(db: Session, user_id: int):
    repo = UserRepository(db)
    return repo.get_by_id(user_id)


def create_user(db: Session, name: str, email: str, password: str):
    repo = UserRepository(db)
    return repo.create_user(name, email, password)