from fastapi import APIRouter, Depends
from sqlalchemy.ext.asyncio import AsyncSession
from app.core.database import get_db
from app.core.dependencies import get_current_user
from app.schemas.auth import LoginRequest, TokenResponse, RefreshRequest, ChangePasswordRequest
from app.services.auth_service import AuthService
from app.core.security import decode_token, create_access_token, create_refresh_token
router = APIRouter(prefix="/auth", tags=["Authentication"])

@router.post("/login", response_model=TokenResponse)
async def login(data: LoginRequest, db: AsyncSession = Depends(get_db)):
    _, access, refresh = await AuthService.login(db, data.email, data.password)
    return TokenResponse(access_token=access, refresh_token=refresh)

@router.post("/refresh", response_model=TokenResponse)
async def refresh(data: RefreshRequest, db=Depends(get_db)):
    p = decode_token(data.refresh_token)
    if p.get("token_type") != "refresh": raise ValueError("Invalid refresh token")
    return TokenResponse(
        access_token=create_access_token(p["user_id"], p["brand_id"], p["role_id"]),
        refresh_token=create_refresh_token(p["user_id"], p["brand_id"], p["role_id"])
    )

@router.post("/logout")
async def logout(user=Depends(get_current_user)):
    return {"success": True, "message": "Logout acknowledged", "data": None}

@router.get("/me")
async def me(user=Depends(get_current_user)):
    return {"success": True, "message": "User profile", "data": {"id": user.id, "brand_id": user.brand_id, "role_id": user.role_id, "name": user.name, "email": user.email}}

@router.post("/change-password")
async def change_password(data: ChangePasswordRequest, user=Depends(get_current_user), db=Depends(get_db)):
    await AuthService.change_password(db, user, data.current_password, data.new_password)
    return {"success": True, "message": "Password changed", "data": None}
