package org.tio.sitexxx.service.service.jpush.huawei.message;


import com.alibaba.fastjson.annotation.JSONField;
import org.tio.sitexxx.service.service.jpush.huawei.apns.ApnsHeaders;
import org.tio.sitexxx.service.service.jpush.huawei.apns.ApnsHmsOptions;
import org.tio.sitexxx.service.service.jpush.huawei.apns.Aps;
import org.tio.sitexxx.service.service.jpush.huawei.util.CollectionUtils;

import java.util.HashMap;
import java.util.Map;

/**
 * <pre>
 *    @author : vagrancy
 *    e-mail : 18050829067@163.com
 *    time   : 2025-02-21 10:59
 *    desc   :
 * </pre>
 */
public class ApnsConfig {
    @JSONField(name = "hms_options")
    private ApnsHmsOptions hmsOptions;

    @JSONField(name = "headers")
    private ApnsHeaders apnsHeaders;

    @JSONField(name = "payload")
    private Map<String, Object> payload = new HashMap<>();

    public void check() {
        if (this.hmsOptions != null) {
            this.hmsOptions.check();
        }
        if (this.apnsHeaders != null) {
            this.apnsHeaders.check();
        }
        if (this.payload != null) {
            if (this.payload.get("aps") != null) {
                Aps aps = (Aps) this.payload.get("aps");
                aps.check();
            }
        }
    }

    public ApnsConfig(Builder builder) {
        this.hmsOptions = builder.hmsOptions;
        this.apnsHeaders = builder.apnsHeaders;
        if (!CollectionUtils.isEmpty(builder.payload) || builder.aps != null) {
            if (!CollectionUtils.isEmpty(builder.payload)) {
                this.payload.putAll(builder.payload);
            }
            if (builder.aps != null) {
                this.payload.put("aps", builder.aps);
            }
        } else {
            this.payload = null;
        }
    }

    public ApnsHmsOptions getHmsOptions() {
        return hmsOptions;
    }

    public Map<String, Object> getPayload() {
        return payload;
    }

    public ApnsHeaders getApnsHeaders() {
        return apnsHeaders;
    }

    /**
     * builder
     */
    public static Builder builder() {
        return new Builder();
    }

    public static class Builder {
        private ApnsHmsOptions hmsOptions;
        private Map<String, Object> payload = new HashMap<>();
        private ApnsHeaders apnsHeaders;
        private Aps aps;

        public Builder setHmsOptions(ApnsHmsOptions hmsOptions) {
            this.hmsOptions = hmsOptions;
            return this;
        }

        public Builder addPayload(String key, Object value) {
            this.payload.put(key, value);
            return this;
        }

        public Builder addAllPayload(Map<String, Object> map) {
            this.payload.putAll(map);
            return this;
        }

        public Builder setApnsHeaders(ApnsHeaders apnsHeaders) {
            this.apnsHeaders = apnsHeaders;
            return this;
        }

        public Builder addPayloadAps(Aps aps) {
            this.aps = aps;
            return this;
        }

        public Builder addPayload(Aps aps) {
            this.aps = aps;
            return this;
        }

        public ApnsConfig build() {
            return new ApnsConfig(this);
        }
    }

}
