# app/routes/auth_routes.py
from fastapi import APIRouter, Form, UploadFile, File, Depends, HTTPException, Request
from sqlalchemy.orm import Session
from app.schemas import VerifyOTPRequest
from .. import auth, models
from app.controllers.auth_controller import send_otp_logic, student_register, verify_otp_logic, verify_otp, logout, get_user_info
from app.auth import get_current_user
from app.models import User
from app.database import get_db

router = APIRouter()

# Student Register
@router.post("/student-register/")
def StudentSave(
    name: str = Form(...),
    gender: str = Form(...),
    email: str = Form(...),
    mobile: str = Form(...),
    dob: str = Form(...),
    location: str = Form(...),
    school_address: str = Form(...),
    profile_picture: UploadFile = File(...),
    db: Session = Depends(get_db)
):
    return student_register(name, gender, email, mobile, dob, location, school_address, profile_picture, db)

# Register Send OTP
@router.post("/send-otp/")
def RegisterOTP(mobile: str = Form(...), db: Session = Depends(get_db)):
    return send_otp_logic(mobile, db)

# Verify Register Send OTP
@router.post("/verify-otp/")
def RegisterVerify(mobile: str = Form(...), otp: str = Form(...), db: Session = Depends(get_db)):
    return verify_otp(mobile, otp, db)

# Student Login OTP
@router.post("/student-login-otp/")
def StudentLoginOTP(mobile: str = Form(...), db: Session = Depends(get_db)):
    return send_otp_logic(mobile, db)

# Student Login Verify OTP
@router.post("/student-login-verify-otp/")
def StudentLoginVerifyOTP(
    request: Request,
    mobile: str = Form(...),
    otp: str = Form(...),
    db: Session = Depends(get_db)
):
    return verify_otp_logic(mobile, otp, request, db)

@router.post("/student-logout/")
def logout_user(request: Request, db: Session = Depends(get_db)):
    return logout(request, db)

@router.get("/user-info/")
def getUserInfo(
    current_user: User = Depends(get_current_user),
    db: Session = Depends(get_db),
    request: Request = None
):
    return get_user_info(current_user, db, request)
