<?php

namespace App\Repositories\Core;

use Illuminate\Support\Facades\Storage;
use Intervention\Image\Facades\Image;

class Upload
{
    public static function getData($file)
    {
        return [
            'filename' => $file->getClientOriginalName(),
            'filetype' => $file->getClientOriginalExtension(),
            'filesize' => $file->getSize(),
            'mime' => $file->getMimeType(),
        ];
    }

    public static function getUuid($file, $data)
    {
        $data = is_array($data) ? (object) $data : $data;
        $pos = strrpos($file, '/');
        $uuid = substr($file, $pos + 1);

        return pathinfo($uuid, PATHINFO_FILENAME);
    }

    public static function storeByVar($var, $path, $public = false)
    {
        $request = Request();

        return $request->has($var) ? basename($request->file($var)->store($path)) : false;
    }

    public static function store($file, $path)
    {
        return Storage::putFile($path, $file);
    }

    public static function storePublic($file, $filepath)
    {
        return Storage::putFile($filepath, $file, 'public');
    }

    public static function createThumb($file, $size, $sub = false)
    {
        $thumb = self::getThumbPath($file, $sub);
        $filename = self::getPublicPath($file);

        return Image::make($filename)->orientate()->widen($size)->save($thumb);
    }

    public static function getPublicPath($file)
    {
        return storage_path('app/public/'.self::getFilename($file));
    }

    public static function getPrivatePath($file)
    {
        return storage_path('app/'.self::getFilename($file));
    }

    public static function getSrc($file)
    {
        return '/storage/'.self::getFilename($file);
    }

    public static function getThumbPath($file)
    {
        return storage_path('app/public/'.self::getThumbFilename($file));
    }

    public static function getThumbSrc($file)
    {
        return '/storage/'.self::getThumbFilename($file);
    }

    public static function getFilename($file)
    {
        $file = is_array($file) ? (object) $file : $file;

        return $file->filepath.'/'.self::getName($file);
    }

    public static function getThumbFilename($file, $sub = false)
    {
        $sub = $sub ? $sub : 'thumbs/';
        $file = is_array($file) ? (object) $file : $file;

        return $file->filepath.'/'.$sub.self::getName($file);
    }

    public static function getName($file)
    {
        $file = is_array($file) ? (object) $file : $file;

        return $file->uuid.'.'.strtolower($file->filetype);
    }

    public static function fix($path)
    {
        if (! self::isWindows()) {
            return $path;
        }

        return str_replace('/', '\\', $path);
    }

    public static function move($source, $dest)
    {
        if (Storage::exists($dest)) {
            self::delete($dest);
        }

        return Storage::move($source, $dest);
    }

    public static function delete($file)
    {
        return Storage::exists($file) ? Storage::delete($file) : false;
    }

    public static function deleteRecursive($path)
    {
        return rmdir_recursive($path);
    }

    public function make_dir($path, $permissions = 0777)
    {
        return is_dir($path) || mkdir($path, $permissions, true);
    }

    public static function isWindows()
    {
        return strtoupper(substr(PHP_OS, 0, 3)) === 'WIN';
    }
}
