package cn.axzo.msg.center.service.pending.response.v3;

import cn.axzo.msg.center.service.domain.DetailConfig;
import cn.axzo.msg.center.service.domain.UrlConfig;
import cn.axzo.msg.center.service.domain.card.AppVersionConfig;
import cn.axzo.msg.center.service.domain.card.StateImageConfig;
import cn.axzo.msg.center.service.pending.card.domain.CardElementConfig;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedButtonV3;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedCardStyle;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedGroupDetail;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedGroupInfo;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedGroupV3;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedKV;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedModelV3;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedTemplateV3;
import cn.axzo.msg.center.service.pending.response.v3.model.PersonInfo;
import cn.axzo.msg.center.service.pending.response.v3.model.PhoneInfo;
import cn.axzo.msg.center.service.pending.response.v3.model.SessionUrlInfo;
import cn.axzo.msg.center.service.pending.response.v3.model.WorkerInfo;

/**
 * @author yanglin
 */
public interface ParsedModel3Visitor {

    default void visitModel(ParsedModelV3 model) {}

    default void exitModel(ParsedModelV3 model) {}

    default void visitTemplate(ParsedTemplateV3 template) {}

    default void exitTemplate(ParsedTemplateV3 template) {}

    default void visitTemplateCardUrlConfig(UrlConfig urlConfig) {}

    default void exitTemplateCardUrlConfig(UrlConfig urlConfig) {}

    default void visitTemplateCardUrl(SessionUrlInfo url) {}

    default void exitTemplateCardUrl(SessionUrlInfo url) {}

    default void visitGroup(ParsedGroupV3 group) {}

    default void exitGroup(ParsedGroupV3 group) {}

    default void visitGroupInfo(ParsedGroupV3 group, ParsedGroupInfo groupInfo) {}

    default void exitGroupInfo(ParsedGroupV3 group, ParsedGroupInfo groupInfo) {}

    default void visitGroupKeyValue(ParsedGroupV3 group, ParsedKV kv) {}

    default void visitGroupWorkerInfo(ParsedGroupV3 group, WorkerInfo workerInfo) {}

    default void exitGroupWorkerInfo(ParsedGroupV3 group, WorkerInfo workerInfo) {}

    default void visitGroupKVPersonInfo(ParsedGroupV3 group, PersonInfo personInfo) {};

    default void exitGroupKVPersonInfo(ParsedGroupV3 group, PersonInfo personInfo) {};

    default void visitGroupKVPhoneInfo(ParsedGroupV3 group, PhoneInfo phoneInfo) {};

    default void exitGroupKVPhoneInfo(ParsedGroupV3 group, PhoneInfo phoneInfo) {};

    default void exitGroupKeyValue(ParsedGroupV3 group, ParsedKV kv) {}

    default void visitGroupDetailConfig(ParsedGroupV3 group, DetailConfig detailConfig) {}

    default void exitGroupDetailConfig(ParsedGroupV3 group, DetailConfig detailConfig) {}

    default void visitGroupDetailUrlConfig(ParsedGroupV3 group,  UrlConfig urlConfig) {}

    default void exitGroupDetailUrlConfig(ParsedGroupV3 group, UrlConfig urlConfig) {}

    default void visitGroupDetail(ParsedGroupV3 group, ParsedGroupDetail detail) {}

    default void exitGroupDetail(ParsedGroupV3 group, ParsedGroupDetail detail) {}

    default void visitGroupDetailUrl(ParsedGroupV3 group, SessionUrlInfo url) {}

    default void exitGroupDetailUrl(ParsedGroupV3 group, SessionUrlInfo url) {}

    default void visitButton(ParsedButtonV3 button) {}

    default void exitButton(ParsedButtonV3 button) {}

    default void visitButtonUrlConfig(ParsedButtonV3 button, UrlConfig urlConfig) {}

    default void exitButtonUrlConfig(ParsedButtonV3 button, UrlConfig urlConfig) {}

    default void visitButtonUrl(ParsedButtonV3 button, SessionUrlInfo url) {}

    default void exitButtonUrl(ParsedButtonV3 button, SessionUrlInfo url) {}

    default void visitAppVersionConfig(AppVersionConfig cfg) {}

    default void exitAppVersionConfig(AppVersionConfig cfg) {}

    default void visitTemplateCardExtField(CardElementConfig cfg) {}

    default void exitTemplateCardExtField(CardElementConfig cfg) {}

    default void visitStateImageConfig(StateImageConfig cfg) {}

    default void exitStateImageConfig(StateImageConfig cfg) {}

    default void visitCardStyleElement(CardElementConfig cfg) {};

    default void exitCardStyleElement(CardElementConfig cfg) {};

    default void visitCardStyle(ParsedCardStyle cardStyle) {};

    default void exitCardStyle(ParsedCardStyle cardStyle) {};
}