package cn.iocoder.yudao.module.system.convert.notice;

import cn.iocoder.yudao.framework.common.util.date.DateUtils;
import cn.iocoder.yudao.module.system.api.subscribe.dto.MsgData;
import cn.iocoder.yudao.module.system.api.subscribe.dto.SubscribeMessageReqDTO;
import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.Date;

/**
 * 功能描述
 *
 * @author yj
 * date  2024年04月07日 19:44
 */
@Mapper
public interface NoticeConvert {

    NoticeConvert INSTANCE = Mappers.getMapper(NoticeConvert.class);

    /**
     * @param openId              微信小程序唯一id
     * @param notice              公告对象
     * @param nickname            发布人姓名
     * @param miniProgramState    小程序的状态
     * @return
     */
     default SubscribeMessageReqDTO convertCompanyNotice(String openId, NoticeDO notice, String noticeLabel, String nickname, String miniProgramState) {
        SubscribeMessageReqDTO message = new SubscribeMessageReqDTO();
        message.setToUser(openId);
        message.setTemplateId("OF4-948Vz9rtE_VA55rmDxo4azOwmrjjk33jDpOiPiY");
        //通知类型
        MsgData noticeType = new MsgData();
        noticeType.setName("thing1");
        noticeType.setValue(noticeLabel); //这里根据业务需求填写具体的公告类型  如全员公告， xxx公告
        message.addData(noticeType);

        //公告标题
        String value = notice.getTitle();
        if (value.length() > 10) {
           value = value.substring(0,10) + ". . . . ";
        }

        MsgData title = new MsgData();
        title.setName("thing6");
        title.setValue(value);
        message.addData(title);

        //通知内容
        MsgData content = new MsgData();
        content.setName("thing2");
        content.setValue("具体内容请进入小程序查看");
        message.addData(content);

        //发布人
        MsgData publishMan = new MsgData();
        publishMan.setName("thing9");
        publishMan.setValue(nickname);
        message.addData(publishMan);

        //通知时间
        MsgData createTime = new MsgData();
        createTime.setName("time3");
        createTime.setValue(DateUtils.dateFormat(new Date(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
        message.addData(createTime);

        message.setMiniprogramState(miniProgramState);
        message.setPage("/subPages/notice/detail?id=" + notice.getId());
        return message;
    }
}
