package cn.axzo.msg.center.inside.notices.service.impl.v3.msg;

import cn.axzo.msg.center.domain.entity.MessageRecordV3;
import cn.axzo.msg.center.inside.notices.config.MessageSystemConfig;
import cn.axzo.msg.center.message.domain.dto.TemplateModelV3;
import cn.axzo.msg.center.message.domain.vo.GeneralMessagePushVO;
import cn.axzo.msg.center.message.domain.vo.GeneralMessagePushVO.Subtitle;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import java.util.Collections;

/**
 * @author yanglin
 */
@Component
@RequiredArgsConstructor
public class MessageTemplateParserV3 {

    private final MessageSystemConfig messageSystemConfig;

    GeneralMessagePushVO parse(MessageRecordV3 message, TemplateModelV3 templateModel) {
        GeneralMessagePushVO im = new GeneralMessagePushVO();
        im.setIdentityCode(message.getIdentityCode());
        im.setTemplateCode(message.getTemplateCode());
        im.setCardBannerUrl(templateModel.getTemplate().getIcon());
        im.setCardTitle(message.getTitle());
        im.setCardContent(message.getContent());
        im.setBizCode(message.getBizCode());
        im.setSendTimestamp(message.getCreateAt().getTime());
        if (StringUtils.isNotBlank(message.getSubtitle())) {
            Subtitle subtitle = new Subtitle();
            subtitle.setIconUrl(messageSystemConfig.getOrgIcon());
            subtitle.setTitle(message.getSubtitle());
            im.setSubtitles(Collections.singletonList(subtitle));
        }

        //JSONObject routerParam = message.getRouterParams();
        //ParsedModelV3 parsedModel = modelV3Parser.parseModel(templateModel,
        //        message.getBizExtParams(), routerParam, null);
        //ParsedModelV3 parsedModel = modelV3Parser.parseModel(templateModel,
        //        message.getBizExtParams(),  null);
        //ParsedModelV3Walker.walkDown(parsedModel, new ParsedModel3Visitor() {
        //
        //    @Override
        //    public void visitTemplateCardUrlConfig(UrlConfig urlConfig) {
        //        if (!urlConfig.hasUrl()) return;
        //        CardButton cardDetailButton = new CardButton();
        //        cardDetailButton.setTitle("详情");
        //        cardDetailButton.setAction(RouterCategoryEnum.JUMP.name());
        //        cardDetailButton.setIsHighlight(false);
        //        cardDetailButton.setActionPaths(getNativeAppLinks(urlConfig));
        //        im.setCardDetailButton(cardDetailButton);
        //
        //        im.setCardUrlForCms(parseUrlForCms(urlConfig));
        //    }
        //
        //    @Override
        //    public void visitGroupKeyValue(ParsedGroupV3 group, ParsedKV kv) {
        //        if (!kv.isDisplayOnCard())
        //            return;
        //        CardExtensionItem item = new CardExtensionItem(kv.getKey(), kv.getValue());
        //        // IM人员: 张三(130****5556)
        //        if (kv.getContentType() == KVContentType.PERSON_ID) {
        //            v3ExtPopulator.populatePersonKV(kv);
        //            PersonInfo person = kv.getPersonInfo();
        //            if (person != null) {
        //                item = new CardExtensionItem(kv.getKey(), person.getPlainPersonInfo());
        //            }
        //        }
        //        if (im.getCardExtension() == null)
        //            im.setCardExtension(new ArrayList<>());
        //        im.getCardExtension().add(item);
        //    }
        //
        //    @Override
        //    public void visitButton(ParsedButtonV3 button) {
        //        List<ButtonStyleEnum> styles = button.parseStyle();
        //        if (!styles.contains(ButtonStyleEnum.OVER_CARD))
        //            return;
        //        if (im.getCardButtons() == null)
        //            im.setCardButtons(new ArrayList<>());
        //        CardButton imButton = new CardButton();
        //        im.getCardButtons().add(imButton);
        //
        //        imButton.setTitle(button.getName());
        //        imButton.setAction(button.getCategory().name());
        //        imButton.setIsHighlight(styles.contains(ButtonStyleEnum.HIGH_LIGHT));
        //        imButton.setIsOverCard(styles.contains(ButtonStyleEnum.OVER_CARD));
        //
        //        if (RouterCategoryEnum.ACTION.equals(button.getCategory())) {
        //            AppLink appLink = new AppLink(TerminalTypeEnum.WEB_VIEW.name(), button.getApiUrl());
        //            imButton.setActionPaths(Collections.singletonList(appLink));
        //            ParsedUrlForCms urlForCms = new ParsedUrlForCms();
        //            urlForCms.setHasManagerAppUrl(true);
        //            urlForCms.setUrl(button.getApiUrl());
        //            imButton.setUrlInfoForCms(urlForCms);
        //        } else {
        //            imButton.setActionPaths(getNativeAppLinks(button.getUrlConfig()));
        //            imButton.setUrlInfoForCms(parseUrlForCms(button.getUrlConfig()));
        //        }
        //    }
        //
        //});
        return im;
    }

    //private static ParsedUrlForCms parseUrlForCms(UrlConfig urlConfig) {
    //    if (urlConfig == null) return null;
    //    ParsedUrlForCms urlForCms = new ParsedUrlForCms();
    //    UrlConfigWalker.walkDown(urlConfig, new UrlConfigVisitor() {
    //
    //        @Override
    //        public void visitPcCms(WebUrl pcCms) {
    //            urlForCms.setUrl(pcCms.getUrl());
    //            urlForCms.setOpenStrategy(pcCms.getOpenStrategy());
    //        }
    //
    //        @Override
    //        public void visitAppManager(MobileUrlConfig appManager) {
    //            urlForCms.setHasManagerAppUrl(appManager.hasUrl());
    //        }
    //
    //    });
    //    return urlForCms;
    //}
    //
    //private List<AppLink> getNativeAppLinks(UrlConfig urlConfig) {
    //    if (urlConfig == null) return Collections.emptyList();
    //    NativeAppLinkUrlConfigVisitor visitor = new NativeAppLinkUrlConfigVisitor();
    //    UrlConfigWalker.walkDown(urlConfig, visitor);
    //    return visitor.getLinks();
    //}

}