<?php

/*
 * Copyright (C) 2015 IRSTEA
 * All rights reserved.
 */

namespace Irstea\FileUploadBundle\Model;

use DateTime;

/**
 *
 * @author Guillaume Perréal <guillaume.perreal@irstea.fr>
 */
interface UploadedFileInterface
{
    const ETAT_EN_COURS = 'en-cours';
    const ETAT_ORPHELIN = 'orphelin';
    const ETAT_NORMAL   = 'normal';
    const ETAT_CORROMPU = 'corrompu';
    const ETAT_MANQUANT = 'manquant';
    const ETAT_REJETE   = 'rejete';

    /**
     * Get id
     *
     * @return integer
     */
    public function getId();

    /**
     * Set originalFilename
     *
     * @param string $displayName
     * @return UploadedFileInterface
     */
    public function setDisplayName($displayName);

    /**
     * Get originalFilename
     *
     * @return string
     */
    public function getDisplayName();

    /**
     * @param string $description
     * @return UploadedFileInterface
     */
    public function setDescription($description = null);

    /**
     * @return string
     */
    public function getDescription();

    /**
     * Get path
     *
     * @return string
     */
    public function getPath();

    /**
     * Set path
     *
     * @param string $path
     * @return UploadedFileInterface
     */
    public function setPath($path);

    /** Change le chemin d'un fichier sans changer le nom.
     *
     * @param string $newDir Nouveau répertoire
     * @return UploadedFileInterface
     */
    public function moveTo($newDir);

    /**
     * Set mimeType
     *
     * @param string $mimeType
     * @return UploadedFileInterface
     */
    public function setMimeType($mimeType);

    /**
     * Get mimeType
     *
     * @return string
     */
    public function getMimeType();

    /**
     * Set size
     *
     * @param integer $size
     * @return UploadedFileInterface
     */
    public function setSize($size);

    /**
     * Get size
     *
     * @return integer
     */
    public function getSize();

    /**
     * Set checksum
     *
     * @param string $checksum
     * @return UploadedFileInterface
     */
    public function setChecksum($checksum);

    /**
     * Get checksum
     *
     * @return string
     */
    public function getChecksum();

    /**
     * Set etat
     *
     * @param string $etat
     * @return UploadedFileInterface
     */
    public function setEtat($etat);

    /**
     * Get etat
     *
     * @return string
     */
    public function getEtat();

    /**
     * Get createdAt
     *
     * @return DateTime
     */
    public function getCreatedAt();

    /**
     * Set metadata
     *
     * @param array $metadata
     * @return UploadedFileInterface
     */
    public function setMetadata(array $metadata);

    /**
     * Get metadata
     *
     * @return array
     */
    public function getMetadata();

    /**
     * @return string
     */
    public function __toString();

    /**
     *
     */
    public function validate();

    /**
     *
     * @return boolean
     */
    public function isValid();

    /**
     *
     * @return boolean
     */
    public function isOrphelin();

    /** Retourne la date de dernière modification dans le filesystem.
     *
     * @return DateTime
     */
    public function getLastModified();

    /** Retourne le contenu du fichier.
     *
     * @return string Une chaîne si $asResource vaut faux,
     */
    public function getContent();

    /** Ecrit dans le fichier.
     *
     * @param string $content
     */
    public function setContent($content);

    /** Ecrit dans le fichier depuis un descripteur de fichier.
     *
     * @param resource $source
     * @param int $maxlen
     * @param int $writeOffset
     * @return int
     */
    public function copyFrom($source, $maxlen = -1, $writeOffset = 0);

    /** Envoie le contenu du fichier dans un descripteur de fichier.
     *
     * @param resource $dest
     * @param int $maxlen
     * @param int $readOffset
     * @return int
     */
    public function copyTo($dest, $maxlen = PHP_INT_MAX, $readOffset = 0);


    /**
     * @return array
     */
    public function toArray();
}