<?php
namespace app\service;

use think\file\UploadedFile;

class File
{
    //上传文件移动到上传文件夹
    public static function move(UploadedFile $file)
    {
        $upload_path = 'storage/uploads/' . date('Ymd');
        $path = app()->getRootPath() . $upload_path;
        $filename = uniqid() . '.' . $file->extension();
        $upload_filename = '/' . $upload_path . '/' . $filename;
        return [$file->move($path, $filename), $file, $upload_filename];
    }

    /**
     * 文件访问路径转换为完整的url
     * @param string|null $fileUrl
     * @param bool $ossAnalysis 是否进行OSS解析
     * @return string
     * @todo 若启用OOS存储,需根据业务配置调整$fileDomain
     *
     */
    public static function convertCompleteFileUrl(?string $fileUrl, bool $ossAnalysis=true): string
    {
        if (empty($fileUrl)) {
            return '';
        }
        if ($ossAnalysis) {
            $fileDomain = self::getFileDomain();
        } else {
            $fileDomain = request()->domain();
        }
        $prefix = substr($fileUrl, 0, 4);
        if (!($prefix == 'http')) {
            $fileUrl    = $fileDomain.'/'.ltrim($fileUrl, '/');
        }

        return $fileUrl;
    }

    /**
     * 文件访问域名前缀
     *
     * @return string
     */
    public static function getFileDomain(): string
    {
        $confBase   = ExtraConfig::base();
        $confOss    = ExtraConfig::aliOss();
        $isOss      = $confBase['oss'] ?? 'false';
        $ossDomain  = $confOss['customDomain'] ?? '';

        // 默认为当前域名
        $fileDomain = request()->domain();
        if ($isOss == 'true' && !empty($ossDomain)) {
            $fileDomain = $ossDomain;
        }

        $fileDomain = trim($fileDomain);
        return rtrim($fileDomain, '/');
    }
}