from pathlib import Path
from typing import Optional

from PIL import Image
from psd_tools import PSDImage

from app.core.logging import setup_logger

logger = setup_logger(__name__)

def generate_psd_preview(psd_path: Path, preview_path: Path) -> Optional[Path]:
    """
    Generate a PNG preview for the given PSD.
    Returns preview_path on success or None on failure.
    """

    try:
        psd = PSDImage.open(psd_path)
        composite = psd.composite().convert("RGBA")
        composite.save(preview_path, "PNG")
        return preview_path

    except Exception:
        logger.exception("PSD -> PNG preview generation failed")

        # fallback attempt: try PIL
        try:
            img = Image.open(psd_path)
            img.save(preview_path, "PNG")
            return preview_path
        except Exception:
            logger.exception("Fallback PSD preview generation also failed")
            return None
