from sqlalchemy.orm import Session

from model import Register
from app.register.repository import RegisterRepository
from app.register.schema import RegisterSchema


class RegisterService:

    @staticmethod
    def register_user(
        db: Session,
        request: RegisterSchema
    ):
        # Check email already exists
        existing_email = (
            RegisterRepository.get_by_email(
                db,
                request.email
            )
        )

        if existing_email:
            raise ValueError(
                "Email already registered"
            )

        # Check mobile already exists
        existing_mobile = (
            RegisterRepository.get_by_mobile_number(
                db,
                request.mobile_number
            )
        )

        if existing_mobile:
            raise ValueError(
                "Mobile number already registered"
            )

        # Check Aadhaar already exists
        if request.aadhar_card:

            existing_aadhar = (
                RegisterRepository.get_by_aadhar_card(
                    db,
                    request.aadhar_card
                )
            )

            if existing_aadhar:
                raise ValueError(
                    "Aadhaar already registered"
                )

        # Create user object
        user = Register(
            name=request.name,
            email=request.email,
            mobile_number=request.mobile_number,
            age=request.age,
            password=request.password,  # later we'll hash this
            aadhar_card=request.aadhar_card
        )

        return RegisterRepository.create_user(
            db,
            user
        )