package com.hotwj.platform.reportStatistics.template;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import org.dromara.common.core.service.DictService;
import org.dromara.common.core.service.OssService;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StringUtils;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;

/**
 * Velocity 模版工具类
 * <p>
 * 提供日期格式化、字典翻译、OSS URL转换等常用功能，供模版直接调用。
 * 在模版中通过 $tool 调用，例如 $tool.formatDate($date)
 * </p>
 *
 * @author shihongwei
 */
public class ReportVelocityTool {

    private static final OssService ossService = SpringUtils.getBean(OssService.class);
    private static final DictService dictService = SpringUtils.getBean(DictService.class);

    /**
     * 格式化日期
     *
     * @param date   日期对象
     * @param format 格式，如 "yyyy-MM-dd"
     */
    public String formatDate(Date date, String format) {
        if (date == null) {
            return "";
        }
        return DateUtil.format(date, format);
    }

    /**
     * 格式化日期 (默认 yyyy-MM-dd)
     */
    public String formatDate(Date date) {
        return formatDate(date, "yyyy-MM-dd");
    }

    /**
     * 获取字典标签
     *
     * @param dictType  字典类型
     * @param dictValue 字典值
     */
    public String getDictLabel(String dictType, Object dictValue) {
        if (dictValue == null) {
            return "";
        }
        String label = dictService.getDictLabel(dictType, String.valueOf(dictValue));
        return StringUtils.isBlank(label) ? "" : label;
    }

    /**
     * 获取字典标签，如果为空返回原值
     */
    public String getDictLabelOrValue(String dictType, Object dictValue) {
        if (dictValue == null) {
            return "";
        }
        String val = String.valueOf(dictValue);
        String label = dictService.getDictLabel(dictType, val);
        return StringUtils.isBlank(label) ? val : label;
    }

    /**
     * 获取单个 OSS URL
     *
     * @param ossId OSS ID
     */
    public String getOssUrl(Object ossId) {
        if (ossId == null) {
            return "";
        }
        String idStr = String.valueOf(ossId);
        if (StrUtil.isBlank(idStr)) {
            return "";
        }
        return ossService.selectUrlByIds(idStr);
    }

    /**
     * 获取 OSS URL 列表 (处理逗号分隔的 ID)
     *
     * @param ossIds OSS ID 字符串 (逗号分隔)
     */
    public List<String> getOssUrls(Object ossIds) {
        if (ossIds == null) {
            return Collections.emptyList();
        }
        String idsStr = String.valueOf(ossIds);
        if (StrUtil.isBlank(idsStr)) {
            return Collections.emptyList();
        }

        String urls = ossService.selectUrlByIds(idsStr);
        if (StrUtil.isBlank(urls)) {
            return Collections.emptyList();
        }

        List<String> list = new ArrayList<>();
        String[] parts = urls.split(",");
        for (String p : parts) {
            String v = p.trim();
            if (StrUtil.isNotBlank(v)) {
                list.add(v);
            }
        }
        return list;
    }
}
