<?php

namespace Aweos\Resizer\Compressors;

use Illuminate\Support\Collection;
use Intervention\Image\ImageManager;
use Storage;

class PngCompressor extends Compressor {

    protected function getExtension(): string
    {
        return 'png';
    }

    public function getExtensionRegex(): string
    {
        return 'png';
    }

    public function make(string $path): array
    {
        $output = $this->tmpPath();
        $mimetype = mime_content_type($path);

        system('imagemin '.escapeshellarg($path).' --plugin=pngquant > '.escapeshellarg($output));
        system("mv ".escapeshellarg($output)." ".escapeshellarg($path));

        return [
            $path => [$path],
        ];
    }

    public function originalSize(): array
    {
        return getimagesize($this->media->root());
    }

    public function shouldGenerateVersions(): bool
    {
        return true;
    }

    public function start(): void
    {
        // 
    }

    public function end(): void
    {
        //
    }

    public function resize(Collection $size, bool $update, callable $callback): void
    {
        $extension = $this->media->extension();
        $temp = microtime().'.'.$extension;

        $r = app(ImageManager::class)->make($this->media->root())->fit($size->get('width'), $size->get('height'));
        app(ImageManager::class)
            ->canvas($size->get('width'), $size->get('height'))->insert($r, 'center')
            ->save(Storage::path($temp));

        list($destWidth, $destHeight) = getimagesize(Storage::path($temp));

        $versionFilename = $this->media->versionsDirPath().'/'.$this->versionFilename($destWidth, $destHeight);

        $this->moveTo($temp, $versionFilename);
        call_user_func($callback, $this->media, Storage::path($versionFilename));
    }

}