import { gameData } from "../pubUtils/data";
import { DicShopListModel } from "../db/DicShopList";
import { ShopItem } from "../domain/dbGeneral";
import { ShopItemListParam } from '../domain/roleField/shop';
import { UserShopModel } from "../db/UserShop";

export async function getShopListById(shopId: number, roleId: string) {

    let shopItemList = new Array<ShopItemListParam>(); // 返回
    let dbDicShop = await DicShopListModel.findByShopId(shopId);
    let userShopRecs = await UserShopModel.findMapByShopId(roleId, shopId);
    // console.log(JSON.stringify([...userShopRecs]))
    

    if(!dbDicShop || dbDicShop.useJson) { // 完全使用json中配置的商品，数据库只做排序用，数据库内没有的排到最后
        let items = dbDicShop?.items||[];
        let map = new Map<number, ShopItem>();
        for(let item of items) {
            map.set(item.id, item);
        }
        let dicShop = gameData.shop.get(shopId)||[];
        for(let { id, type } of dicShop) {
            let buyCount = userShopRecs.has(id)?userShopRecs.get(id).count: 0;
            if(map.has(id)) {
                let item = map.get(id);
                let param = new ShopItemListParam(id, item.discount, type, buyCount, item.order);
                shopItemList.push(param);
            } else {
                let param = new ShopItemListParam(id, 1, type, buyCount, 0);
                shopItemList.push(param);
            }
        }

    } else { // 只返回数据库内的商品
        let items = dbDicShop?.items||[];
        for(let item of items) {
            let { id, order, discount } = item;
            let buyCount = userShopRecs.has(id)?userShopRecs.get(id).count: 0;
            let dicShop = gameData.shopItem.get(id);
            if(dicShop) {
                let param = new ShopItemListParam(id, discount, dicShop.type, buyCount, order);
                shopItemList.push(param);
            }
        }
    }

    shopItemList = shopItemList.sort((a, b) => b.order - a.order);
    return shopItemList;
}

export async function getAllShopList(roleId: string) {
    let shopLists: {shopId: number, shopItemList: ShopItemListParam[]}[] = [];
    for(let [ shopId ] of gameData.shopList) {
        let shopItemList = await getShopListById(shopId, roleId);
        shopLists.push({ shopId, shopItemList });
    }
    return shopLists;
}