<?php

abstract class Image extends File
{
    public $width;
    public $height;
    public $type;
    public $size;

    public $original_filename;

    /**
     * @var ImageVariant[]
     */
    public $variants = array();

    protected static $max_width;

    protected static $max_height;

    protected static $sizes = array();

    protected static $watermarks = array();

    public static function getClassName()
    {
        return get_called_class();
    }

    /**
     * @param $class string|StdClass
     * @throws ErrorException
     */
    public static function checkSubClass($class)
    {
        if (!self::getIsSubClass($class)) {
            throw new ErrorException('Class "' . $class . '" mast be extend of "Image".');
        }
    }

    /**
     * @param $class string|StdClass
     * @return bool
     */
    public static function getIsSubClass($class)
    {
        return (get_parent_class($class) == __CLASS__);
    }

    public static function getSizes()
    {
        return static::$sizes;
    }

    public static function getWatermark($size)
    {
        return (isset(static::$watermarks[$size])) ? static::$watermarks[$size] : false;
    }

    public static function getMaxWidth()
    {
        return static::$max_width;
    }

    public static function getMaxHeight()
    {
        return static::$max_height;
    }

    /**
     * @param $size
     * @param $force_create
     * @return ImageVariant
     */
    public function getVariant($size, $force_create = false)
    {
        return parent::getImageVariant($size, $force_create);
    }
}