<?php
// +----------------------------------------------------------------------
// | onezan-admin 快速开发的管理平台
// +----------------------------------------------------------------------
// | 官方网址：https://www.onezan.cn
// +----------------------------------------------------------------------
// | onezan团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: 543885307@qq.com
// +----------------------------------------------------------------------
namespace app\repository\media;

use app\repository\BaseRepository;
use think\facade\Db;


/**
 * 媒体文件仓储
 * @package app\repository\media
 */
class MediaFileRepository extends BaseRepository
{
    /**
     * 分页查询媒体文件
     * @param array $filters
     * @param int $limit
     * @return mixed
     */
    public function paginate(array $filters, int $limit)
    {
        $query = Db::name('sys_media_files')
            ->alias('f')
            ->leftJoin('sys_media_groups g', 'f.group_id = g.id')
            ->field('f.*,g.name as group_name')
            ->order('f.id', 'desc');

        $keyword = trim((string)($filters['keyword'] ?? ''));
        if ($keyword !== '') {
            $query->where('f.original_name', 'like', "%{$keyword}%");
        }

        $type = trim((string)($filters['type'] ?? ''));
        if ($type !== '') {
            $query->where('f.type', $type);
        }

        if (is_numeric($filters['group_id'] ?? null)) {
            $query->where('f.group_id', (int)$filters['group_id']);
        }

        return $query->paginate($limit);
    }


    /**
     * 向媒体库插入新文件记录
     * @param array $data
     * @return int|string
     */
    public function insert(array $data): int
    {
        return (int)Db::name('sys_media_files')->insertGetId($data);
    }


    /**
     * 按主键查找媒体文件
     * @param int $id
     * @return array|null
     */
    public function findById(int $id): ?array
    {
        $row = Db::name('sys_media_files')->where('id', $id)->find();
        return is_array($row) ? $row : null;
    }


    /**
     * 根据ID批量查询媒体文件
     * @param array $ids 文件ID数组
     * @return array
     */
    public function findByIds(array $ids): array
    {
        if (!$ids) {
            return [];
        }

        return Db::name('sys_media_files')->whereIn('id', $ids)->select()->toArray();
    }


    /**
     * 按主键删除媒体文件
     * @param int $id
     * @return void
     */
    public function deleteById(int $id): void
    {
        Db::name('sys_media_files')->where('id', $id)->delete();
    }


    /**
     * 批量按主键删除媒体文件
     * @param array $ids
     * @return void
     */
    public function deleteByIds(array $ids): void
    {
        if (!$ids) {
            return;
        }

        Db::name('sys_media_files')->whereIn('id', $ids)->delete();
    }


    /**
     * 清除指定分组的媒体文件分组ID
     * @param int $groupId 分组ID
     * @return void
     */
    public function clearGroupId(int $groupId): void
    {
        Db::name('sys_media_files')->where('group_id', $groupId)->update(['group_id' => 0]);
    }
}