<?php

namespace HelpGent\App\DTO;

defined( 'ABSPATH' ) || exit;

use HelpGent\App\MediaDrivers\Local as LocalDrive;

class AttachmentDTO {
    private int $id = 0;

    private string $title;

    private string $mime_type;

    private int $file_size;

    private string $storage = '';

    private int $created_by;

    private ?string $file_id = null;

    private ?string $upload_token = null;

    private ?string $file_url = null;

    private ?string $file_path = null;

    public function __construct() {
        $this->storage = LocalDrive::get_key();
    }

    /**
     * Get the value of id
     *
     * @return int
     */
    public function get_id(): int {
        return $this->id;
    }

    /**
     * Set the value of id
     *
     * @param int $id 
     *
     * @return self
     */
    public function set_id( int $id ): self {
        $this->id = $id;

        return $this;
    }

    /**
     * Get the value of title
     *
     * @return string
     */
    public function get_title(): string {
        return $this->title;
    }

    /**
     * Set the value of title
     *
     * @param string $title 
     *
     * @return self
     */
    public function set_title( string $title ): self {
        $this->title = $title;

        return $this;
    }

    /**
     * Get the value of mime_type
     *
     * @return string
     */
    public function get_mime_type(): string {
        return $this->mime_type;
    }

    /**
     * Set the value of mime_type
     *
     * @param string $mime_type 
     *
     * @return self
     */
    public function set_mime_type( string $mime_type ): self {
        $this->mime_type = $mime_type;

        return $this;
    }

    /**
     * Get the value of file_size
     *
     * @return int
     */
    public function get_file_size(): int {
        return $this->file_size;
    }

    /**
     * Set the value of file_size
     *
     * @param int $file_size 
     *
     * @return self
     */
    public function set_file_size( int $file_size ): self {
        $this->file_size = $file_size;

        return $this;
    }

    /**
     * Get the value of storage
     *
     * @return string
     */
    public function get_storage(): string {
        return $this->storage;
    }

    /**
     * Set the value of storage
     *
     * @param string $storage 
     *
     * @return self
     */
    public function set_storage( string $storage ): self {
        $this->storage = $storage;

        return $this;
    }

    /**
     * Get the value of created_by
     *
     * @return int
     */
    public function get_created_by(): int {
        return $this->created_by;
    }

    /**
     * Set the value of created_by
     *
     * @param int $created_by 
     *
     * @return self
     */
    public function set_created_by( int $created_by ): self {
        $this->created_by = $created_by;

        return $this;
    }

    /**
     * Get the value of file_id
     *
     * @return ?string
     */
    public function get_file_id(): ?string {
        return $this->file_id;
    }

    /**
     * Set the value of file_id
     *
     * @param ?string $file_id 
     *
     * @return self
     */
    public function set_file_id( ?string $file_id ): self {
        $this->file_id = $file_id;

        return $this;
    }

    /**
     * Get the value of upload_token
     *
     * @return ?string
     */
    public function get_upload_token(): ?string {
        return $this->upload_token;
    }

    /**
     * Set the value of upload_token
     *
     * @param ?string $upload_token 
     *
     * @return self
     */
    public function set_upload_token( ?string $upload_token ): self {
        $this->upload_token = $upload_token;

        return $this;
    }

    /**
     * Get the value of file_url
     *
     * @return ?string
     */
    public function get_file_url(): ?string {
        return $this->file_url;
    }

    /**
     * Set the value of file_url
     *
     * @param ?string $file_url 
     *
     * @return self
     */
    public function set_file_url( ?string $file_url ): self {
        $this->file_url = $file_url;

        return $this;
    }

    /**
     * Get the value of file_path
     *
     * @return ?string
     */
    public function get_file_path(): ?string {
        return $this->file_path;
    }

    /**
     * Set the value of file_path
     *
     * @param ?string $file_path 
     *
     * @return self
     */
    public function set_file_path( ?string $file_path ): self {
        $this->file_path = $file_path;

        return $this;
    }
}