<?php
/**
 * @package merchant
 *
 * @author xaboy
 * @day 2020/5/29
 *
 * 
 */

namespace app\controller\api\store\service;


use crmeb\basic\BaseController;
use app\common\repositories\store\service\StoreServiceLogRepository;
use app\common\repositories\store\service\StoreServiceRepository;
use think\App;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;

use think\facade\Db;
use think\facade\Log;
use think\facade\Cache;

/**
 * Class Service
 * @package app\controller\api\store\service
 * @author xaboy
 * @day 2020/5/29
 */
class ThirdPartyCategory extends BaseController
{
    /**
     * @var StoreServiceRepository
     */
    // protected $model; // 模型

    /**
     * Service constructor.
     * @param App $app
     * @param StoreServiceRepository $repository
     */
    public function __construct()
    {
        
        
        // $this->model=Db::name("third_party_category");
    }

    

    /**
     * 添加或更新分类数据，并更新缓存
     * @param int $cid 分类ID
     * @param string $c_name 分类名称
     * @param int $type 平台类型
     * @return bool|int|string 成功返回ID或true，失败返回错误信息字符串
     */
    public function addOrUpdateCategory(int $cid, string $c_name, int $type)
    {
        // 1. 尝试从缓存中获取数据
        $cacheKey = $this->getCacheKey($cid, $type);
        $cachedData = Cache::get($cacheKey);

        if ($cachedData) {
            return true; // 缓存命中，说明已存在，直接返回 true
        }

        // 2. 查询数据库
        $existingRecord = Db::name("third_party_category")
            ->where('cid', $cid)
            ->where('type', $type)
            ->find();
        
        if ($existingRecord) {
            // 3. 数据库中已存在，更新缓存并返回true
            Cache::set($cacheKey, $existingRecord, 3600); // 缓存 1 小时
            return true;
        }

        // 4. 数据库中不存在，写入新记录
        $data = [
            'cid' => $cid,
            'c_name' => $c_name,
            'type' => $type,
        ];

        try {
            $result = Db::name("third_party_category")->save($data);
            if ($result === false){
                Log::info('Error: Database save failed.');
                return 'Error: Database save failed.';
            }
        } catch (\Exception $e) {
            Log::info('Error: Database exception - ' . $e->getMessage());
            return 'Error: Database exception - ' . $e->getMessage();
        }

        if ($result) {
            // 5. 写入成功，更新缓存
            Cache::set($cacheKey, $data, 3600); // 缓存 1 小时
            // return $this->model->id; //返回新插入的ID
        } else {
            Log::info('Error: Unknown database error.');
            // return 'Error: Unknown database error.';
        }
    }

        /**
     * 生成缓存键
     * @param int $cid 分类ID
     * @param int $type 平台类型
     * @return string
     */
    private function getCacheKey(int $cid, int $type): string
    {
        return 'category_' . $cid . '_' . $type;
    }

    /**
     * 清除指定或所有分类缓存
     * @param int|null $cid 可选，分类ID，如果为null则清除所有分类缓存
     * @param int|null $type 可选，平台类型，如果cid为null则忽略此参数
     */
    public function clearCategoryCache(int $cid = null, int $type=null)
    {
        if ($cid === null) {
            Cache::clear(); // 清除所有缓存
        } else {
            $cacheKey = $this->getCacheKey($cid, $type);
            Cache::delete($cacheKey);
        }
    }
}