<?php

namespace App\Http\Services;

use Illuminate\Support\Facades\Redis;

class ClassService
{
    //获取首页需要的所有分类,没有英文名称的不要
    public static function getClassificationForHome()
    {
        $cache = Redis::get('semour_classification_cache');
//        $cache = [];
        if ($cache) {
            return json_decode($cache, true);
        }
        //先获取所有分类
        $classData = \Http::get(config('website.footstone_url') . '/open/getClassification')->json();
        $secondClassList = [];
        if (isset($classData['code']) && $classData['code'] == 0) {
            $classCache = $classData['data'];
            foreach ($classCache as $key => &$class) {
                if (!$class['parent_id']) {
                    if (empty($class['class_name_en'])) {
                        continue;
                    }
                    $secondClassList[] = $class;
                }
            }
            unset($class);
            foreach ($classCache as $key => $class) {
                if (!$class['parent_id']) {
                    continue;
                }
                foreach ($secondClassList as &$secondClass) {
                    if ($secondClass['class_id'] == $class['parent_id']) {
                        if (empty($class['class_name_en'])) {
                            continue;
                        }
                        $secondClass['children'][] = $class;
                    }
                }
                unset($secondClass);
            }

            $topClassMapping = config('field.top_class_mapping');
            $topFields = [];
            foreach ($topClassMapping as $key => $mapping) {
                $topFields[$key] = [
                    'class_name' => $key,
                ];
            }
            foreach ($topClassMapping as $key => $mapping) {
                foreach ($secondClassList as $secondClass) {
                    if (in_array($secondClass['class_id'], $topClassMapping[$key])) {
                        if (empty($secondClass['class_name_en'])) {
                            continue;
                        }
                        $topFields[$key]['img'] = \Arr::get(config('field.top_class_img_mapping'), $key);
                        $topFields[$key]['children'][] = $secondClass;
                    }
                }
            }
            $data = array_values($topFields);
            Redis::set('semour_classification_cache', json_encode($data));
            Redis::expire('semour_classification_cache', 600);
            return $data;
        }
        return [];
    }

    public static function getClassificationById($classId, $includeChildren = false)
    {
        $cache = Redis::get('semour_classification_cache_' . $classId);
        if ($cache) {
            return json_decode($cache, true);
        }
        $classData = \Http::get(config('website.footstone_url') . '/open/getClassification')->json();
        if (isset($classData['code']) && $classData['code'] == 0) {
            $classificationCache = $classData['data'];
            $classification = [];
            foreach ($classificationCache as $class) {
                if ($class['class_id'] == $classId) {
                    $classification = $class;
                }
            }
            if ($classification['parent_id']) {
                return $classification;
            }
            //获取子分类
            $totalSkuNumber = 0;
            foreach ($classificationCache as $classCache) {
                if ($classCache['parent_id'] == $classId) {
                    if (empty($classCache['class_name_en'])) {
                        continue;
                    }
                    $totalSkuNumber += $classCache['sku_number'];
                    $classification['children'][] = $classCache;
                }
            }
            $classification['sku_number'] = $totalSkuNumber;
            Redis::set('semour_classification_cache_' . $classId, json_encode($classification));
            Redis::expire('semour_classification_cache_' . $classId, 600);
            return $classification;
        }
        return [];
    }

}