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

use app\repository\BaseRepository;
use Applications\sample\modules\category\model\Category;

/**
 * Category Repository
 * @package Applications\sample\modules\category\repository
 */
class CategoryRepository extends BaseRepository
{
    /**
     * 后台分页列表
     * @param array $filters 筛选条件
     * @param int $limit 每页条数
     * @return array
     */
    public function paginateForAdmin(array $filters, int $limit): array
    {
        $query = Category::order('sort', 'asc')->order('id', 'desc');
        $keyword = trim((string)($filters['keyword'] ?? ''));
        if ($keyword !== '') {
            $query->where('name', 'like', "%{$keyword}%");
        }
        $status = $filters['status'] ?? '';
        if ($status !== '' && $status !== null) {
            $query->where('status', (int)$status);
        }
        return $query->paginate($limit)->toArray();
    }


    /**
     * 获取所有启用状态的分类
     * @return array
     */
    public function allEnabled(): array
    {
        return Category::where('status', 1)->order('sort', 'asc')->order('id', 'desc')->select()->toArray();
    }


    /**
     * 根据ID查找分类
     * @param int $id 分类ID
     * @return Category|null
     */
    public function findById(int $id): ?Category
    {
        $c = Category::find($id);
        return $c instanceof Category ? $c : null;
    }


    /**
     * 创建分类
     * @param array $data 分类数据
     * @return Category
     */
    public function create(array $data): Category
    {
        return Category::create($data);
    }


    /**
     * 保存分类
     * @param Category $category 分类模型实例
     * @param array $data 更新数据
     * @return void
     */
    public function save(Category $category, array $data): void
    {
        $category->save($data);
    }


    /**
     * 根据ID删除分类
     * @param int $id 分类ID
     * @return void
     */
    public function deleteById(int $id): void
    {
        Category::destroy($id);
    }
}
