import os
import uuid
from fastapi import UploadFile
from pathlib import Path

# Путь для сохранения изображений
IMAGES_DIR = Path("static/images")

# Разрешенные типы файлов
ALLOWED_EXTENSIONS = {".jpg", ".jpeg", ".png", ".gif", ".webp"}

async def save_image(file: UploadFile) -> str:
    """
    Сохраняет изображение в директорию и возвращает относительный путь к нему
    """
    if not file:
        return None
    
    # Получаем расширение файла
    _, ext = os.path.splitext(file.filename)
    if ext.lower() not in ALLOWED_EXTENSIONS:
        raise ValueError(f"Неподдерживаемый формат файла. Поддерживаемые форматы: {', '.join(ALLOWED_EXTENSIONS)}")
    
    # Создаем уникальное имя файла
    filename = f"{uuid.uuid4()}{ext}"
    file_path = IMAGES_DIR / filename
    
    # Создаем директорию, если не существует
    os.makedirs(IMAGES_DIR, exist_ok=True)
    
    # Сохраняем файл
    contents = await file.read()
    with open(file_path, "wb") as f:
        f.write(contents)
    
    # Возвращаем относительный путь для хранения в базе данных
    return f"/static/images/{filename}"

def delete_image(image_path: str) -> None:
    """
    Удаляет файл изображения, если оно существует
    """
    if not image_path:
        return
    
    # Удаляем первый слэш из пути, если есть
    if image_path.startswith("/"):
        image_path = image_path[1:]
    
    full_path = Path(image_path)
    
    if full_path.exists():
        os.unlink(full_path) 
