from fastapi import APIRouter, Depends
from fastapi.security import OAuth2PasswordRequestForm
from sqlalchemy.orm import Session
from app.api import deps
from app.db.session import get_db
from app.schemas.user import UserCreate, UserResponse
from app.schemas.token import Token, TokenRefreshRequest
from app.services.auth import auth_service
from app.models.user import User

router = APIRouter()

@router.post("/register", response_model=UserResponse, status_code=201)
def register(
    user_in: UserCreate, 
    db: Session = Depends(get_db)
):
    """Register a new customer account."""
    return auth_service.register_user(db, user_in=user_in)

@router.post("/login", response_model=Token)
def login(
    db: Session = Depends(get_db),
    form_data: OAuth2PasswordRequestForm = Depends()
):
    """OAuth2 compatible token login, returning JWT Access and Refresh tokens."""
    # OAuth2 menggunakan form_data.username untuk email
    user = auth_service.authenticate_user(db, email=form_data.username, password=form_data.password)
    return auth_service.generate_tokens(user)

@router.post("/refresh", response_model=Token)
def refresh_token(
    refresh_in: TokenRefreshRequest,
    db: Session = Depends(get_db)
):
    """Obtain a new access token using a valid refresh token."""
    return auth_service.refresh_access_token(db, refresh_token=refresh_in.refresh_token)

@router.get("/me", response_model=UserResponse)
def read_users_me(
    current_user: User = Depends(deps.get_current_user)
):
    """Fetch current logged-in user profile details."""
    return current_user
