<?php

namespace App\Repositories\Core;

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

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

        return $data;
    }

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

        return $uuid;
    }

    public static function storeByVar($var, $path, $public = false)
    {
        // check if filename exists
        // store
        // Storage::disk('local')->put('file.txt', 'Contents');
        // $path = Storage::putFile('avatars', $request->file('avatar'));
        // $path = $request->file('avatar')->storeAs('avatars',$request->user()->id,'s3');
        // $path = $request->file('avatar')->storePublicly('avatars', 's3');
        $request = Request();

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

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

    public static function storePublic($file, $filepath)
    {
        return Storage::putFile($filepath, $file, 'public');
        // $filepath = 'public/' . $filepath;
        // return $file->store($filepath);
    }

    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 getPath($file) {
            return 'public/' . self::getFilename($file);
        }
    */

    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);
    }

    /**
     * [fix problem path with Storage on Windows]
     *
     * @param  [type] $path [description]
     * @return [type]       [description]
     */
    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';
    }
}
