<?php

namespace app\service;

use app\entity\SysFileRecord;
use app\entity\SysFileRule;
use app\entity\UploadFile;
use app\service\file\FilesystemService;
use think\File;
use think\Service;

/**
 * 文件服务
 */
class FileService extends Service
{
    public function register(): void
    {
        /*
         * 注册到全局容器中
         */
        $this->app->bind('filesystem', FilesystemService::class);
    }

    public function upload(string $contextId, File $file, SysFileRule $rule): UploadFile
    {
        $sysFileRecord = new SysFileRecord;
        // 存储规则相关
        $sysFileRecord->set('rid', $rule->id); // ruleId
        $sysFileRecord->set('disk', $rule->disk); // 存储disk
        // 文件信息相关
        $sysFileRecord->set('path', ''); // 文件存储路径
        $sysFileRecord->set('name', ''); // 文件名称
        $sysFileRecord->set('length', (int)$file->getSize()); // 文件大小
        $sysFileRecord->set('content_type', $file->getMime()); // 文件类型(mime)
        $sysFileRecord->set('md5', $file->md5());// 文件md5
        $sysFileRecord->set('sha1', $file->sha1()); // 文件sha1
        $sysFileRecord->set('extension', $file->extension()); // 文件扩展名(extension)
        $sysFileRecord->set('origin_name', $file->getFilename()); // 文件原始名称
        $sysFileRecord->set('create_time', date('Y-m-d H:i:s')); // 文件记录创建时间
        $sysFileRecord->set('create_date', date('Y-m-d')); // 文件记录创建日期
        // 关联数据相关
        $sysFileRecord->set('context_id', $contextId); // 来源上下文

        // 返回UploadFile实体类
        $uploadFile = new UploadFile();
        $uploadFile->done($file, $sysFileRecord);
        return $uploadFile;
    }
}