package tech.blueglacier.email;

import tech.blueglacier.util.MimeWordDecoder;
import org.apache.james.mime4j.codec.DecodeMonitor;
import org.apache.james.mime4j.dom.FieldParser;
import org.apache.james.mime4j.dom.field.UnstructuredField;
import org.apache.james.mime4j.field.AbstractField;
import org.apache.james.mime4j.stream.Field;

/**
 * Simple unstructured field such as <code>Subject</code>.
 */
public class CustomUnstructuredFieldImpl extends AbstractField implements UnstructuredField {
    private boolean parsed = false;

    private String value;

    public CustomUnstructuredFieldImpl(Field rawField, DecodeMonitor monitor) {
        super(rawField, monitor);
    }

    /**
     * @see org.apache.james.mime4j.dom.field.UnstructuredField#getValue()
     */
    public String getValue() {
        if (!parsed)
            parse();

        return value;
    }

    private void parse() {
        String body = getBody();

        value = MimeWordDecoder.decodeEncodedWords(body, monitor);

        parsed = true;
    }

    public static final FieldParser<UnstructuredField> PARSER = new FieldParser<UnstructuredField>() {

        public UnstructuredField parse(final Field rawField, final DecodeMonitor monitor) {
            return new CustomUnstructuredFieldImpl(rawField, monitor);
        }

    };

}