from fastapi import APIRouter, Depends, HTTPException, Request, status
import uuid
from sqlalchemy.orm import Session
from utils.get_db import get_db
from models.organization_user_inivite_model import InviteStatus
from services.organization_invite_service import get_all_invites, send_invite_to_user, accept_invite_of_user, verify_invite_token
from schema.organization_invite_schema import OrganizationInviteRequestSchema, OrganizationInviteResponse, AcceptInviteResponse


organization_invite_router = APIRouter()

@organization_invite_router.get("/verify-invite/{invite_token}", status_code=status.HTTP_200_OK)
def verify_invite(invite_token: str, db: Session = Depends(get_db)):
    return verify_invite_token(invite_token, db)

@organization_invite_router.get("/all-invites", status_code=status.HTTP_200_OK)
def get_all_invites_of_org(request:Request,db: Session = Depends(get_db), page:int=1, limit:int=10, search: str = None, status: InviteStatus = None, sort_by: str = "created_at", sort_order: str = "desc", org_id: str = None):
    current_user = request.state.user
    return get_all_invites(request,current_user, db, page, limit, search, status, sort_by, sort_order, org_id)

@organization_invite_router.post("/send-invite", response_model=OrganizationInviteResponse, status_code=status.HTTP_201_CREATED)
async def send_invite(payload:OrganizationInviteRequestSchema,request:Request,db: Session = Depends(get_db)):
    return await send_invite_to_user(request,payload,db)

@organization_invite_router.patch("/accept-invite/{invite_token}", status_code=status.HTTP_200_OK)
def accept_invite(payload: AcceptInviteResponse,invite_token, request:Request, db: Session = Depends(get_db)):
    return accept_invite_of_user(payload,invite_token, request, db)