<?php

class CoinImage
{
    private PDO $db;

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

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

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

    public function delete(int $id): bool
    {
        // Get image info to delete file
        $stmt = $this->db->prepare('SELECT filename FROM coin_images WHERE id = :id LIMIT 1');
        $stmt->execute(['id' => $id]);
        $image = $stmt->fetch();

        if ($image && $image['filename']) {
            FileUpload::delete(UPLOAD_ITEMS_PATH . '/' . $image['filename']);
            // Delete thumbnail
            $thumbPath = FileUpload::getThumbnailPath(UPLOAD_ITEMS_PATH . '/' . $image['filename'], UPLOAD_ITEMS_THUMBS_PATH);
            FileUpload::delete($thumbPath);
        }

        $stmt = $this->db->prepare('DELETE FROM coin_images WHERE id = :id');
        return $stmt->execute(['id' => $id]);
    }

    public function deleteByCoinId(int $coinId): bool
    {
        // Get all images to delete files
        $stmt = $this->db->prepare('SELECT filename FROM coin_images WHERE coin_id = :coin_id');
        $stmt->execute(['coin_id' => $coinId]);
        $images = $stmt->fetchAll();

        foreach ($images as $image) {
            if ($image['filename']) {
                FileUpload::delete(UPLOAD_ITEMS_PATH . '/' . $image['filename']);
                // Delete thumbnail
                $thumbPath = FileUpload::getThumbnailPath(UPLOAD_ITEMS_PATH . '/' . $image['filename'], UPLOAD_ITEMS_THUMBS_PATH);
                FileUpload::delete($thumbPath);
            }
        }

        $stmt = $this->db->prepare('DELETE FROM coin_images WHERE coin_id = :coin_id');
        return $stmt->execute(['coin_id' => $coinId]);
    }
}
