# app/api/routes/image_upload_routes.py
from fastapi import APIRouter, File, UploadFile, HTTPException, Depends
import boto3
from botocore.exceptions import NoCredentialsError, PartialCredentialsError
from app.config import settings
from app.utils.auth_utils import get_token_data
from app.schemas.base_response import BaseResponse
import uuid

router = APIRouter()

s3_client = boto3.client(
    's3',
    aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
    aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY,
    region_name=settings.AWS_REGION
)


@router.post("/upload", response_model=BaseResponse)
async def upload_file(file: UploadFile = File(...), token_data: dict = Depends(get_token_data)):
    try:
        # Generate a random image name
        random_image_name = f"{uuid.uuid4()}{file.filename}"

        s3_client.upload_fileobj(
            file.file,
            settings.AWS_S3_BUCKET_NAME,
            random_image_name,
            ExtraArgs={"ContentType": file.content_type}
        )
        return BaseResponse(success=True, message="File uploaded successfully", data={"filename": random_image_name})
    except NoCredentialsError:
        raise HTTPException(status_code=403, detail="AWS credentials not found")
    except PartialCredentialsError:
        raise HTTPException(status_code=403, detail="Incomplete AWS credentials")
    except Exception as e:
        raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
