from fastapi import HTTPException
from sqlalchemy.orm import Session
from app.api.institution import schema
from app.dependency.authantication import JWTPayloadSchema
from app.locale.messages import Messages
from app.models.main.institution import InstitutionBase, TblInstitution
from app.models.main.user import TblUser
from app.utils.schemas_utils import CustomResponse

class InstitutionService:
    def __init__(self, db: Session, token: JWTPayloadSchema):
        self.db = db
        self.token = token
    
    async def create_institution(self, request: schema.InstitutionCreate):
        created_institution = InstitutionBase.model_validate(request.model_dump())
        new_institution = TblInstitution(**created_institution.model_dump())
        self.db.add(new_institution)
        self.db.commit()
        self.db.refresh(new_institution)
        from app.api.user.service import UserService
        user_service = UserService(self.db, self.token)
        await user_service.admin_link(
            admin_id=0,
            simulation_id=new_institution.institution_id,
            request=request.user
        )
        user = self.db.query(TblUser).order_by(TblUser.user_id.desc()).first()
        new_institution.admin_id = user.user_id
        self.db.commit()
        self.db.refresh(new_institution)

        return CustomResponse(status="1", message=Messages.INSTITUTION)

    async def geted_institution(self, institution_id: int):
        geted_data = TblInstitution.get(institution_id, self.db)
        if geted_data is None:
            raise HTTPException(status_code=404, detail="InfoTech data not found")
        from app.api.user.service import UserService
        user_service = UserService(self.db, self.token)
        user = await user_service.get_admin(institution_id)
        return {
            "institutionId": geted_data.institution_id,
            "institutionsName": geted_data.institutions_name,
            "membersCount": geted_data.members_count,
            "simulationCount": geted_data.simulation_count,
            "user": {
                "userId": user.user_id,
                "firstName": user.first_name,
                "lastName": user.last_name,
                "emailId": user.email_id,
                "mobile_number": user.mobile_number
            } if user else None
        }


