from fastapi import APIRouter, Depends, HTTPException, status from fastapi.security import OAuth2PasswordRequestForm from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import text from app.db.session import get_db from app.services.auth_service import AuthService from app.core.security import create_access_token from app.schemas.auth import UserLiteRegister, Token, PasswordResetRequest, UserKYCComplete from app.api.deps import get_current_user # Ez kezeli a belépett felhasználót from app.models.identity import User router = APIRouter() @router.post("/register-lite", response_model=Token, status_code=201) async def register_lite(user_in: UserLiteRegister, db: AsyncSession = Depends(get_db)): """Step 1: Alapszintű regisztráció és aktiváló e-mail küldése.""" check = await db.execute(text("SELECT id FROM data.users WHERE email = :e"), {"e": user_in.email}) if check.fetchone(): raise HTTPException(status_code=400, detail="Ez az email cím már foglalt.") try: user = await AuthService.register_lite(db, user_in) token = create_access_token(data={"sub": str(user.id)}) return {"access_token": token, "token_type": "bearer", "is_active": user.is_active} except Exception as e: raise HTTPException(status_code=500, detail=f"Szerver hiba: {str(e)}") @router.post("/login", response_model=Token) async def login(form_data: OAuth2PasswordRequestForm = Depends(), db: AsyncSession = Depends(get_db)): """Bejelentkezés az access_token megszerzéséhez.""" user = await AuthService.authenticate(db, form_data.username, form_data.password) if not user: raise HTTPException(status_code=401, detail="Hibás e-mail vagy jelszó.") token = create_access_token(data={"sub": str(user.id)}) return {"access_token": token, "token_type": "bearer", "is_active": user.is_active} @router.get("/verify-email") async def verify_email(token: str, db: AsyncSession = Depends(get_db)): """E-mail megerősítése a kiküldött token alapján.""" success = await AuthService.verify_email(db, token) if not success: raise HTTPException(status_code=400, detail="Érvénytelen vagy lejárt token.") return {"message": "Email sikeresen megerősítve! Jöhet a Step 2 (KYC)."} @router.post("/complete-kyc") async def complete_kyc( kyc_in: UserKYCComplete, db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user) ): """Step 2: Okmányok rögzítése, Privát Széf és Wallet aktiválása.""" user = await AuthService.complete_kyc(db, current_user.id, kyc_in) if not user: raise HTTPException(status_code=404, detail="Felhasználó nem található.") return {"status": "success", "message": "Gratulálunk! A Privát Széf és a Pénztárca aktiválva lett."} @router.post("/forgot-password") async def forgot_password(req: PasswordResetRequest, db: AsyncSession = Depends(get_db)): """Jelszó-visszaállító link küldése.""" await AuthService.initiate_password_reset(db, req.email) return {"message": "Ha a cím létezik, elküldtük a helyreállítási linket."}