<?php

require_once APP_ROOT . '/models/Literature.php';

class LiteratureController
{
    private Literature $litModel;

    public function __construct()
    {
        if (!Session::isLoggedIn()) {
            header('Location: ' . APP_URL . '/login');
            exit;
        }
        $this->litModel = new Literature();
    }

    public function index(): void
    {
        $documents = $this->litModel->getAllByUser(Session::getUserId());
        require APP_ROOT . '/views/literature/index.php';
    }

    public function store(): void
    {
        if (!Session::verifyCsrfToken($_POST['csrf_token'] ?? '')) {
            Session::flash('error', 'Invalid request.');
            header('Location: ' . APP_URL . '/literature');
            exit;
        }

        $title = trim($_POST['title'] ?? '');

        $validator = new Validator();
        $validator->required('title', $title, Lang::get('literature_title'));

        if ($validator->fails()) {
            Session::flash('error', $validator->firstError());
            header('Location: ' . APP_URL . '/literature');
            exit;
        }

        if (empty($_FILES['file']['name'])) {
            Session::flash('error', Lang::get('literature_file') . ' is required.');
            header('Location: ' . APP_URL . '/literature');
            exit;
        }

        $result = FileUpload::upload($_FILES['file'], UPLOAD_LITERATURE_PATH, ALLOWED_DOC_TYPES);

        if (!$result['success']) {
            Session::flash('error', $result['error']);
            header('Location: ' . APP_URL . '/literature');
            exit;
        }

        $this->litModel->create([
            'user_id'       => Session::getUserId(),
            'title'         => $title,
            'file_path'     => $result['filename'],
            'file_type'     => $result['mime_type'],
            'file_size'     => $result['size'],
            'original_name' => $result['original'],
        ]);

        Session::flash('success', Lang::get('literature_uploaded'));
        header('Location: ' . APP_URL . '/literature');
        exit;
    }

    public function delete(string $id): void
    {
        $this->litModel->delete((int)$id);
        Session::flash('success', Lang::get('literature_deleted'));
        header('Location: ' . APP_URL . '/literature');
        exit;
    }
}
