from fastapi import FastAPI, Form, Depends, HTTPException, Request
import requests
import os
from fastapi.responses import FileResponse
from app.database import get_db
from sqlalchemy.orm import Session
from app.models import User
import tempfile

ELEVENLABS_API_KEY = "sk_e6d81a278349db89d1529ae70c06c75b52315a409db36063"
BASE_URL = "https://api.elevenlabs.io"

def generate_voice(text: str, voice_id: str = "ojNjxYKrSUDwsRrANSYc") -> bytes:
    url = f"{BASE_URL}/v1/text-to-speech/{voice_id}"
    headers = {
        "xi-api-key": ELEVENLABS_API_KEY,
        "Content-Type": "application/json",
        "Accept": "audio/wav"
    }
    payload = {
        "text": text,
        "model_id": "eleven_monolingual_v1",
        "voice_settings": {
            "stability": 0.5,
            "similarity_boost": 0.75
        }
    }
    response = requests.post(url, json=payload, headers=headers)
    if response.status_code == 200:
        return response.content
    else:
        raise Exception(f"Error: {response.status_code} - {response.text}")

def clone_fixed(text: str, type: str, current_user: User, db: Session, request: Request):
    if type.lower() == "male":
        voice_id = "ojNjxYKrSUDwsRrANSYc"
    else:
        voice_id = "P7vsEyTOpZ6YUTulin8m"

    audio_bytes = generate_voice(text, voice_id=voice_id)

    with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as tmp:
        tmp.write(audio_bytes)
        tmp_path = tmp.name

    return FileResponse(tmp_path, media_type="audio/wav", filename="cloned_output.wav")
