<?php
/**
 * 存储驱动基类
 */

namespace Plugin\storage\drivers;

abstract class Driver
{
    protected $config = [];

    /**
     * 构造函数
     * @param array $config 配置参数
     */
    public function __construct($config = [])
    {
        $this->config = $config;
    }

    /**
     * 上传文件
     * @param string $filePath 本地文件路径
     * @param string $savePath 保存路径
     * @param string $originalName 原始文件名
     * @return array
     */
    abstract public function upload($filePath, $savePath, $originalName = '');

    /**
     * 删除文件
     * @param string $path 文件路径
     * @return bool
     */
    abstract public function delete($path);

    /**
     * 获取文件访问URL
     * @param string $path 文件路径
     * @return string
     */
    abstract public function getUrl($path);

    /**
     * 检查文件是否存在
     * @param string $path 文件路径
     * @return bool
     */
    abstract public function exists($path);

    /**
     * 获取驱动名称
     * @return string
     */
    abstract public function getName();

    /**
     * 获取配置表单
     * @return array
     */
    abstract public function getConfigForm();

    /**
     * 验证配置
     * @return bool
     */
    abstract public function validateConfig();

    /**
     * 测试连接是否可用
     * @return bool
     */
    public function testConnection()
    {
        return $this->validateConfig();
    }
}
