<?php
require_once __DIR__ . '/DB.php';

class Image {
    public static function create(array $data): int {
        $db = DB::get();
        $stmt = $db->prepare("
            INSERT INTO images 
            (owner_user_id, src, md5_hash, original_tag, hidden_username, age_days, pool_enabled, is_disabled, exif_json, created_at, view_count)
            VALUES (:owner_user_id, :src, :md5_hash, :original_tag, :hidden_username, 0, 1, 0, :exif_json, NOW(), 0)
        ");
        $stmt->execute([
            ':owner_user_id'   => $data['owner_user_id'],
            ':src'             => $data['src'],
            ':md5_hash'        => $data['md5_hash'],
            ':original_tag'    => $data['original_tag'],
            ':hidden_username' => $data['hidden_username'] ? 1 : 0,
            ':exif_json'       => $data['exif_json'] ?? null,
        ]);
        return (int)$db->lastInsertId();
    }

    public static function existsByMd5(string $md5): bool {
        $db = DB::get();
        $stmt = $db->prepare("SELECT id FROM images WHERE md5_hash = ?");
        $stmt->execute([$md5]);
        return (bool)$stmt->fetch();
    }

    public static function getRandomForUser(int $userId, int $count): array {
        $db = DB::get();
        $stmt = $db->prepare("
            SELECT i.*, u.username 
            FROM images i
            JOIN users u ON u.id = i.owner_user_id
            WHERE i.owner_user_id != :uid
              AND i.pool_enabled = 1
              AND i.is_disabled = 0
            ORDER BY RAND()
            LIMIT :cnt
        ");
        $stmt->bindValue(':uid', $userId, PDO::PARAM_INT);
        $stmt->bindValue(':cnt', $count, PDO::PARAM_INT);
        $stmt->execute();
        $images = $stmt->fetchAll();

        if ($images) {
            $ids = array_column($images, 'id');
            $in  = implode(',', array_fill(0, count($ids), '?'));
            $upd = $db->prepare("UPDATE images SET view_count = view_count + 1 WHERE id IN ($in)");
            $upd->execute($ids);
        }

        return $images;
    }
}