// 
// Decompiled by Procyon v0.6.0
// 

package com.google.common.flogger.parameter;

import java.util.Locale;
import java.util.Calendar;
import java.text.FieldPosition;
import java.util.Date;
import com.google.common.flogger.backend.FormatChar;
import com.google.common.flogger.backend.FormatType;
import java.text.MessageFormat;
import com.google.common.flogger.backend.FormatOptions;

public class BraceStyleParameter extends Parameter
{
    private static final FormatOptions WITH_GROUPING;
    private static final MessageFormat prototypeMessageFormatter;
    private static final int MAX_CACHED_PARAMETERS = 10;
    private static final BraceStyleParameter[] DEFAULT_PARAMETERS;
    
    public static BraceStyleParameter of(final int index) {
        return (index < 10) ? BraceStyleParameter.DEFAULT_PARAMETERS[index] : new BraceStyleParameter(index);
    }
    
    private BraceStyleParameter(final int index) {
        super(FormatOptions.getDefault(), index);
    }
    
    @Override
    protected void accept(final ParameterVisitor visitor, final Object value) {
        if (FormatType.INTEGRAL.canFormat(value)) {
            visitor.visit(value, FormatChar.DECIMAL, BraceStyleParameter.WITH_GROUPING);
        }
        else if (FormatType.FLOAT.canFormat(value)) {
            visitor.visit(value, FormatChar.FLOAT, BraceStyleParameter.WITH_GROUPING);
        }
        else if (value instanceof Date) {
            final String formatted = ((MessageFormat)BraceStyleParameter.prototypeMessageFormatter.clone()).format(new Object[] { value }, new StringBuffer(), null).toString();
            visitor.visitPreformatted(value, formatted);
        }
        else if (value instanceof Calendar) {
            visitor.visitDateTime(value, DateTimeFormat.DATETIME_FULL, this.getFormatOptions());
        }
        else {
            visitor.visit(value, FormatChar.STRING, this.getFormatOptions());
        }
    }
    
    @Override
    public String getFormat() {
        return "%s";
    }
    
    static {
        WITH_GROUPING = FormatOptions.of(16, -1, -1);
        prototypeMessageFormatter = new MessageFormat("{0}", Locale.ROOT);
        DEFAULT_PARAMETERS = new BraceStyleParameter[10];
        for (int index = 0; index < 10; ++index) {
            BraceStyleParameter.DEFAULT_PARAMETERS[index] = new BraceStyleParameter(index);
        }
    }
}
