const pagesService = require('../service/pages.service');
const projectsService = require('../service/projects.service');
const templates = require('../service/templates.service');
const util = require('../utils/util');

module.exports = {
  async list(ctx) {
    const { pageNum = 1, pageSize = 10, type = 1, keyword = '' } = ctx.request.query;
    const { total } = await templates.listCount(type, keyword);
    if (total == 0) {
      return util.success(ctx, {
        list: [],
        total: 0,
        pageSize: +pageSize || 10,
        pageNum: +pageNum || 1,
      });
    }
    const list = await templates.list(pageNum, pageSize, type, keyword);
    util.success(ctx, {
      list,
      total,
      pageSize: +pageSize,
      pageNum: +pageNum,
    });
  },

  async detail(ctx) {
    const { id } = ctx.request.params;
    if (!util.isNotEmpty(id)) {
      return ctx.throw(400, '模板id不能为空');
    }
    const { userId } = util.decodeToken(ctx);
    const [result = {}] = await templates.getDetailById(+id, userId);
    util.success(ctx, result);
  },

  async create(ctx) {
    const { unionId, type, name, description, imageUrl, tags } = ctx.request.body;
    const { userId, userName } = util.decodeToken(ctx);
    if (!util.isNumber(unionId)) {
      return ctx.throw(400, 'unionId参数异常');
    }
    if (!util.isNumber(type)) {
      return ctx.throw(400, 'type参数异常');
    }
    if (!name || !description) {
      return ctx.throw(400, '模板描述不能为空');
    }
    if (!imageUrl) {
      return ctx.throw(400, '请上传模板封面');
    }
    if (!Array.isArray(tags)) {
      return ctx.throw(400, '模板标签格式异常');
    }
    if (tags.length === 0) {
      return ctx.throw(400, '模板标签不能为空');
    }
    const tags_arr = tags.join(',');
    await templates.create({ ...ctx.request.body, unionId, tags: tags_arr, userId, userName });
    if (type == 1) {
      projectsService.updateProjectTemplate(unionId, 1);
    } else if (type == 2) {
      pagesService.updatePageTemplate(unionId, 1);
    }
    util.success(ctx);
  },

  async delete(ctx) {
    const { unionId, type } = ctx.request.body;
    if (!util.isNumber(unionId)) {
      return ctx.throw(400, '[unionId]参数错误');
    }
    if (!util.isNumber(type)) {
      return ctx.throw(400, '[type]参数错误');
    }
    const { userId } = util.decodeToken(ctx);
    await templates.deleteById(unionId, userId);
    if (type == 1) {
      projectsService.updateProjectTemplate(unionId, 0);
    } else if (type == 2) {
      pagesService.updatePageTemplate(unionId, 0);
    }
    util.success(ctx);
  },

  async update(ctx) {
    const { id, name, description, isRecommend, imageUrl, installCount } = ctx.request.body;
    if (!util.isNumber(id)) {
      return ctx.throw(400, '组件id不正确');
    }

    const { userId } = util.decodeToken(ctx);

    await templates.update(id, name, description, isRecommend, imageUrl, installCount, userId);
    util.success(ctx);
  },
};