from fastapi import APIRouter, HTTPException, Depends
from passlib.context import CryptContext
from sqlalchemy.orm import Session

from app.database import get_db
from app.models.company import Company
from app.models.user import User
from app.schemas.auth import RegisterRequest, LoginRequest, TokenResponse, UserResponse
from app.utils.jwt import create_token
from app.api.deps import get_current_user

router = APIRouter(prefix="/api/v1/auth")

pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")


@router.post("/register", response_model=TokenResponse)
async def register(request: RegisterRequest, db: Session = Depends(get_db)):
    # 중복 이메일 확인
    if db.query(User).filter(User.email == request.email).first():
        raise HTTPException(status_code=400, detail="이미 사용 중인 이메일입니다")

    # 회사 생성
    company = Company(name=request.company_name)
    db.add(company)
    db.flush()

    # 첫 번째 유저 → admin
    user = User(
        company_id=company.id,
        email=request.email,
        hashed_password=pwd_context.hash(request.password),
        role="admin",
    )
    db.add(user)
    db.commit()
    db.refresh(user)

    token = create_token({"user_id": user.id, "company_id": company.id, "role": user.role})
    return {"token": token}


@router.post("/login", response_model=TokenResponse)
async def login(request: LoginRequest, db: Session = Depends(get_db)):
    user = db.query(User).filter(User.email == request.email).first()
    if not user or not pwd_context.verify(request.password, user.hashed_password):
        raise HTTPException(status_code=401, detail="이메일 또는 비밀번호가 올바르지 않습니다")

    token = create_token({"user_id": user.id, "company_id": user.company_id, "role": user.role})
    return {"token": token}


@router.get("/me", response_model=UserResponse)
async def get_me(current_user: User = Depends(get_current_user)):
    return current_user
