<?php

class Literature
{
    private PDO $db;

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

    public function getAllByUser(int $userId): array
    {
        $stmt = $this->db->prepare(
            'SELECT * FROM literature WHERE user_id = :user_id ORDER BY created_at DESC'
        );
        $stmt->execute(['user_id' => $userId]);
        return $stmt->fetchAll();
    }

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

    public function create(array $data): int
    {
        $stmt = $this->db->prepare(
            'INSERT INTO literature (user_id, title, file_path, file_type, file_size, original_name) VALUES (:user_id, :title, :file_path, :file_type, :file_size, :original_name)'
        );
        $stmt->execute([
            'user_id'       => $data['user_id'],
            'title'         => $data['title'],
            'file_path'     => $data['file_path'],
            'file_type'     => $data['file_type'] ?? null,
            'file_size'     => $data['file_size'] ?? 0,
            'original_name' => $data['original_name'] ?? null,
        ]);
        return (int)$this->db->lastInsertId();
    }

    public function delete(int $id): bool
    {
        $doc = $this->findById($id);
        if ($doc && $doc['file_path']) {
            FileUpload::delete(UPLOAD_LITERATURE_PATH . '/' . $doc['file_path']);
        }
        $stmt = $this->db->prepare('DELETE FROM literature WHERE id = :id');
        return $stmt->execute(['id' => $id]);
    }
}
