<?php

/**
 * @file classes/file/PKPFile.php
 *
 * Copyright (c) 2014-2021 Simon Fraser University
 * Copyright (c) 2000-2021 John Willinsky
 * Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
 *
 * @class PKPFile
 *
 * @ingroup file
 *
 * @brief Base PKP file class.
 */

namespace PKP\file;

use APP\core\Services;

class PKPFile extends \PKP\core\DataObject
{
    //
    // Get/set methods
    //
    /**
     * Get server-side file name of the file.
     *
     * @return string
     */
    public function getServerFileName()
    {
        return $this->getData('fileName');
    }

    /**
     * Set server-side file name of the file.
     *
     * @param string $fileName
     */
    public function setServerFileName($fileName)
    {
        $this->setData('fileName', $fileName);
    }

    /**
     * Get original uploaded file name of the file.
     *
     * @return string
     */
    public function getOriginalFileName()
    {
        return $this->getData('originalFileName');
    }

    /**
     * Set original uploaded file name of the file.
     *
     * @param string $originalFileName
     */
    public function setOriginalFileName($originalFileName)
    {
        $this->setData('originalFileName', $originalFileName);
    }

    /**
     * Get type of the file.
     *
     * @return string
     */
    public function getFileType()
    {
        return $this->getData('filetype');
    }

    /**
     * Set type of the file.
     */
    public function setFileType($fileType)
    {
        $this->setData('filetype', $fileType);
    }

    /**
     * Get uploaded date of file.
     *
     * @return string
     */
    public function getDateUploaded()
    {
        return $this->getData('dateUploaded');
    }

    /**
     * Set uploaded date of file.
     *
     * @param string $dateUploaded
     */
    public function setDateUploaded($dateUploaded)
    {
        return $this->SetData('dateUploaded', $dateUploaded);
    }

    /**
     * Get file size of file.
     *
     * @return int
     */
    public function getFileSize()
    {
        return $this->getData('fileSize');
    }

    /**
     * Set file size of file.
     *
     * @param int $fileSize
     */
    public function setFileSize($fileSize)
    {
        return $this->SetData('fileSize', $fileSize);
    }

    /**
     * Return pretty file size string (in B, KB, MB, or GB units).
     *
     * @return string
     */
    public function getNiceFileSize()
    {
        return Services::get('file')->getNiceFileSize($this->getFileSize());
    }


    //
    // Abstract template methods to be implemented by subclasses.
    //
    /**
     * Return absolute path to the file on the host filesystem.
     *
     * @return string
     */
    public function getFilePath()
    {
        assert(false);
    }
}

if (!PKP_STRICT_MODE) {
    class_alias('\PKP\file\PKPFile', '\PKPFile');
}
