from fastapi import APIRouter, Form, UploadFile, File, Depends, HTTPException, Request
from sqlalchemy.orm import Session
from app.controllers.chat_controller import save_chat, getUserChat
from app.controllers.avatar_controller import getUserAvatars, get_full_url, saveAvatar
from app.controllers.elevenlabs_client import clone_fixed, generate_voice
from app.models import User
from app.auth import get_current_user
from app.database import get_db
from app.dependencies import permission_required

router = APIRouter()

# Save chat for User
@router.post("/chat-store/")
def store_chat(user_message: str = Form(...), bot_replay: str = Form(...),
    current_user: User = Depends(get_current_user),
    db: Session = Depends(get_db),
    _ = Depends(permission_required("view-dashboard"))
):
    return save_chat(user_message, bot_replay, current_user, db)

# Get User Chat
@router.post("/chat/")
def UserChat(current_user: User = Depends(get_current_user),db: Session = Depends(get_db)):
    return getUserChat(current_user, db)

# Get User Chat
@router.post("/user-avatar/")
def getAvatars( request: Request, current_user: User = Depends(get_current_user),db: Session = Depends(get_db)):
    return getUserAvatars(current_user, db, request)

# Update or Insert Avatar Name
@router.post("/add-user-avatar/")
# def saveorUpdateAvatar(data: AvatarRequest,current_user: User = Depends(get_current_user),db: Session = Depends(get_db)):
#     return saveAvatar(data.avatar_id, data.avatar_name, current_user, db, None)

def saveorUpdateAvatar(avatar_id: int = Form(...), avatar_name: str = Form(...),
    current_user: User = Depends(get_current_user),
    db: Session = Depends(get_db)):
    return saveAvatar(avatar_id, avatar_name, current_user, db)

# ElevanLabs Voice Cloning routes
@router.post("/clone-fixed/")
def VoiceClone(
    request: Request,
    text: str,
    type: str,
    current_user: User = Depends(get_current_user),
    db: Session = Depends(get_db)):
    return clone_fixed(text, type, current_user, db, request)
