package com.qunar.cm.ic.dao.converter;

import com.qunar.cm.ic.model.Event;
import org.bson.Document;
import org.springframework.core.convert.converter.Converter;
import org.springframework.data.convert.WritingConverter;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;

import java.util.Objects;

/**
 * Created by yu.qi on 2018/08/27.
 */
@WritingConverter
@Component
public class EventWriteConverter implements Converter<Event, Document> {

    @Nullable
    @Override
    public Document convert(Event event) {
        if (Objects.equals(event.getDummy(), true)) {
            return convertDummy(event);
        }
        Document document = new Document(event.getBody());

        document.remove("type");
        document.remove("timestamp");
        document.remove("updatedTimestamp");
        document.entrySet().removeIf(entry -> entry.getKey().startsWith("_"));

        document.put("id", event.getId());
        document.put("operator", event.getOperator());
        document.put("source", event.getSource());
        document.put("time", event.getTime());
        document.put("updated", event.getUpdated());
        document.put("_ip", event.getIp());
        document.put("_hidden", event.getHidden());
        document.put("_dummy", event.getDummy());
        //数据库中存储的字段为event,展示给用户的是type
        document.put("event", event.getType());
        return document;
    }

    private Document convertDummy(Event event) {
        Document document = new Document();
        document.put("_hidden", event.getHidden());
        document.put("_dummy", true);
        document.put("id", event.getId());
        return document;
    }
}