<?php

class ItemImage
{
    private PDO $db;

    public function __construct()
    {
        $this->db = Database::getInstance();
    }

    public function getAllByItem(int $itemId): array
    {
        $stmt = $this->db->prepare(
            'SELECT * FROM item_images WHERE item_id = :item_id ORDER BY sort_order ASC, id ASC'
        );
        $stmt->execute(['item_id' => $itemId]);
        return $stmt->fetchAll();
    }

    public function create(array $data): int
    {
        $stmt = $this->db->prepare(
            'INSERT INTO item_images (item_id, filename, sort_order)
             VALUES (:item_id, :filename, :sort_order)'
        );
        $stmt->execute([
            'item_id'    => $data['item_id'],
            'filename'   => $data['filename'],
            'sort_order' => $data['sort_order'] ?? 0,
        ]);
        return (int)$this->db->lastInsertId();
    }

    public function findById(int $id): ?array
    {
        $stmt = $this->db->prepare('SELECT * FROM item_images WHERE id = :id LIMIT 1');
        $stmt->execute(['id' => $id]);
        $row = $stmt->fetch();
        return $row ?: null;
    }

    public function delete(int $id): bool
    {
        $img = $this->findById($id);
        if ($img) {
            FileUpload::delete(UPLOAD_ITEMS_PATH . '/' . $img['filename']);
            // Delete thumbnail
            $thumbPath = FileUpload::getThumbnailPath(UPLOAD_ITEMS_PATH . '/' . $img['filename'], UPLOAD_ITEMS_THUMBS_PATH);
            FileUpload::delete($thumbPath);
        }
        $stmt = $this->db->prepare('DELETE FROM item_images WHERE id = :id');
        return $stmt->execute(['id' => $id]);
    }

    public function deleteByItem(int $itemId): bool
    {
        $images = $this->getAllByItem($itemId);
        foreach ($images as $img) {
            FileUpload::delete(UPLOAD_ITEMS_PATH . '/' . $img['filename']);
            // Delete thumbnail
            $thumbPath = FileUpload::getThumbnailPath(UPLOAD_ITEMS_PATH . '/' . $img['filename'], UPLOAD_ITEMS_THUMBS_PATH);
            FileUpload::delete($thumbPath);
        }
        $stmt = $this->db->prepare('DELETE FROM item_images WHERE item_id = :item_id');
        return $stmt->execute(['item_id' => $itemId]);
    }
}
