package com.zhiqiyun.open.router.apis;

import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dliyun.oap.framework.annotation.ServiceMethod;
import com.dliyun.oap.framework.annotation.ServiceMethodBean;
import com.dliyun.oap.framework.response.OapResponse;
import com.zhiqiyun.open.core.models.place.PlaceBaseInfo;
import com.zhiqiyun.open.core.models.place.PlaceCategory;
import com.zhiqiyun.open.core.service.PlaceBaseInfoService;
import com.zhiqiyun.open.core.service.PlaceCategoryService;
import com.zhiqiyun.open.router.request.place.CategoryPageRequest;
import com.zhiqiyun.open.router.request.place.CategoryRequest;
import com.zhiqiyun.open.router.request.place.PlaceInfoRequest;
import com.zhiqiyun.open.router.request.place.PlaceInfoSaveRequest;
import com.zhiqiyun.open.utils.DateUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

@Slf4j
@ServiceMethodBean
public class PlaceApi {

    @Autowired
    private PlaceCategoryService placeCategoryService;


    @Autowired
    private PlaceBaseInfoService placeBaseInfoService;

    @ServiceMethod(method = "list.place.category", title = "查询文旅场所分类")
    public OapResponse listPlaceCategory(CategoryRequest request) {
        QueryWrapper<PlaceCategory> wrapper = new QueryWrapper<>();
        if (StringUtils.isNotBlank(request.getId())) {
            wrapper.eq("id", request.getId());
        }
        if (StringUtils.isNotBlank(request.getName())) {
            wrapper.like("name", request.getName());
        }
        if (request.getIsShow() != null) {
            wrapper.eq("is_show", request.getIsShow());
        }
        if (StringUtils.isNotBlank(request.getCode())) {
            wrapper.eq("category_id", request.getCode());
        }
        wrapper.orderByDesc("sort_number");
        wrapper.orderByDesc("id");
        List<PlaceCategory> listData = this.placeCategoryService.list(wrapper);
        return OapResponse.success().setBody(listData);
    }

    @ServiceMethod(method = "list.place.category.page", title = "查询文旅场所分类分页")
    public OapResponse listPlaceCategoryPage(@RequestBody CategoryPageRequest request) {
        QueryWrapper<PlaceCategory> wrapper = new QueryWrapper<>();
        if (StringUtils.isNotBlank(request.getName())) {
            wrapper.like("name", request.getName());
        }
        if (request.getIsShow() != null) {
            wrapper.eq("is_show", request.getIsShow());
        }
        if (StringUtils.isNotBlank(request.getCode())) {
            wrapper.eq("category_id", request.getCode());
        }
        Page<PlaceCategory> page = new Page<>(request.getCurrent(), request.getPageSize());
        page.addOrder(OrderItem.asc("sort_number"));
        page.addOrder(OrderItem.desc("id"));
        Page<PlaceCategory> resultData = this.placeCategoryService.page(page, wrapper);
        return OapResponse.success().setBody(resultData);
    }


    @ServiceMethod(method = "list.place.info.page", title = "查询文旅场所")
    public OapResponse listPlaceInfoPage(PlaceInfoRequest request) {
        QueryWrapper<PlaceBaseInfo> wrapper = new QueryWrapper<>();

        if (StringUtils.isNotBlank(request.getName())) {
            wrapper.like("name", request.getName());
        }
        Page<PlaceBaseInfo> page = new Page<>(request.getCurrent(), request.getPageSize());

        page.addOrder(OrderItem.desc("id"));

        Page<PlaceBaseInfo> resultData = this.placeBaseInfoService.page(page, wrapper);

        for (PlaceBaseInfo baseInfo : resultData.getRecords()) {
            PlaceCategory category = this.placeCategoryService.getById(baseInfo.getCategoryId());
            baseInfo.setCategory(category);
        }
        return OapResponse.success().setBody(resultData);
    }

    @ServiceMethod(method = "list.place.info.save", title = "文旅场所保存")
    public OapResponse listPlaceInfoSave(PlaceInfoSaveRequest request) {
        PlaceBaseInfo placeBaseInfo = new PlaceBaseInfo();
        placeBaseInfo.setCategoryId(request.getCategoryId());
        placeBaseInfo.setAddress(request.getAddress());
        placeBaseInfo.setName(request.getName());
        placeBaseInfo.setLitpics(JSONArray.parseArray(request.getLitpics(), String.class));
        placeBaseInfo.setContacts(request.getContacts());
        placeBaseInfo.setContactNumber(request.getContactNumber());
        placeBaseInfo.setBrief(request.getBrief());
        placeBaseInfo.setLat(request.getLat());
        placeBaseInfo.setLng(request.getLng());
        placeBaseInfo.setId(request.getId());
        if (placeBaseInfo.getId() != null) {
            placeBaseInfo.setUpdatedTime(DateUtil.current());
            placeBaseInfoService.updateById(placeBaseInfo);
        } else {
            placeBaseInfo.setUpdatedTime(DateUtil.current());
            placeBaseInfo.setCreatedTime(DateUtil.current());
            placeBaseInfoService.save(placeBaseInfo);
        }
        return OapResponse.success().setBody(placeBaseInfo);
    }
}
