package io.netty.handler.codec;

import io.netty.util.AsciiString;
import io.netty.util.concurrent.FastThreadLocal;
import io.netty.util.internal.ObjectUtil;
import java.util.BitSet;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import kotlinx.serialization.json.internal.AbstractJsonLexerKt;

/* JADX INFO: loaded from: classes.dex */
public final class DateFormatter {
    private static final String[] CALENDAR_MONTH_TO_SHORT_NAME;
    private static final String[] DAY_OF_WEEK_TO_SHORT_NAME;
    private static final BitSet DELIMITERS;
    private static final FastThreadLocal<DateFormatter> INSTANCES;
    private final GregorianCalendar cal;
    private int dayOfMonth;
    private boolean dayOfMonthFound;
    private int hours;
    private int minutes;
    private int month;
    private boolean monthFound;
    private final StringBuilder sb;
    private int seconds;
    private boolean timeFound;
    private int year;
    private boolean yearFound;

    static {
        BitSet bitSet = new BitSet();
        DELIMITERS = bitSet;
        bitSet.set(9);
        for (char c2 = ' '; c2 <= '/'; c2 = (char) (c2 + 1)) {
            DELIMITERS.set(c2);
        }
        for (char c3 = ';'; c3 <= '@'; c3 = (char) (c3 + 1)) {
            DELIMITERS.set(c3);
        }
        for (char c4 = AbstractJsonLexerKt.BEGIN_LIST; c4 <= '`'; c4 = (char) (c4 + 1)) {
            DELIMITERS.set(c4);
        }
        for (char c5 = AbstractJsonLexerKt.BEGIN_OBJ; c5 <= '~'; c5 = (char) (c5 + 1)) {
            DELIMITERS.set(c5);
        }
        DAY_OF_WEEK_TO_SHORT_NAME = new String[]{"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
        CALENDAR_MONTH_TO_SHORT_NAME = new String[]{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
        INSTANCES = new FastThreadLocal<DateFormatter>() { // from class: io.netty.handler.codec.DateFormatter.1
            /* JADX WARN: Can't rename method to resolve collision */
            @Override // io.netty.util.concurrent.FastThreadLocal
            public DateFormatter initialValue() {
                return new DateFormatter();
            }
        };
    }

    private DateFormatter() {
        this.cal = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
        this.sb = new StringBuilder(29);
        reset();
    }

    public static StringBuilder append(Date date, StringBuilder sb) {
        return formatter().append0((Date) ObjectUtil.checkNotNull(date, "date"), (StringBuilder) ObjectUtil.checkNotNull(sb, "sb"));
    }

    private StringBuilder append0(Date date, StringBuilder sb) {
        this.cal.setTime(date);
        sb.append(DAY_OF_WEEK_TO_SHORT_NAME[this.cal.get(7) - 1]);
        sb.append(", ");
        sb.append(this.cal.get(5));
        sb.append(' ');
        sb.append(CALENDAR_MONTH_TO_SHORT_NAME[this.cal.get(2)]);
        sb.append(' ');
        sb.append(this.cal.get(1));
        sb.append(' ');
        appendZeroLeftPadded(this.cal.get(11), sb).append(AbstractJsonLexerKt.COLON);
        appendZeroLeftPadded(this.cal.get(12), sb).append(AbstractJsonLexerKt.COLON);
        StringBuilder sbAppendZeroLeftPadded = appendZeroLeftPadded(this.cal.get(13), sb);
        sbAppendZeroLeftPadded.append(" GMT");
        return sbAppendZeroLeftPadded;
    }

    private static StringBuilder appendZeroLeftPadded(int i2, StringBuilder sb) {
        if (i2 < 10) {
            sb.append('0');
        }
        sb.append(i2);
        return sb;
    }

    private Date computeDate() {
        this.cal.set(5, this.dayOfMonth);
        this.cal.set(2, this.month);
        this.cal.set(1, this.year);
        this.cal.set(11, this.hours);
        this.cal.set(12, this.minutes);
        this.cal.set(13, this.seconds);
        return this.cal.getTime();
    }

    public static String format(Date date) {
        return formatter().format0((Date) ObjectUtil.checkNotNull(date, "date"));
    }

    private String format0(Date date) {
        append0(date, this.sb);
        return this.sb.toString();
    }

    private static DateFormatter formatter() {
        DateFormatter dateFormatter = INSTANCES.get();
        dateFormatter.reset();
        return dateFormatter;
    }

    private static int getNumericalValue(char c2) {
        return c2 - '0';
    }

    private static boolean isDelim(char c2) {
        return DELIMITERS.get(c2);
    }

    private static boolean isDigit(char c2) {
        return c2 >= '0' && c2 <= '9';
    }

    private static boolean matchMonth(String str, CharSequence charSequence, int i2) {
        return AsciiString.regionMatchesAscii(str, true, 0, charSequence, i2, 3);
    }

    private boolean normalizeAndValidate() {
        int i2;
        int i3 = this.dayOfMonth;
        if (i3 < 1 || i3 > 31 || this.hours > 23 || this.minutes > 59 || this.seconds > 59) {
            return false;
        }
        int i4 = this.year;
        if (i4 >= 70 && i4 <= 99) {
            i2 = i4 + 1900;
        } else {
            if (i4 < 0 || i4 >= 70) {
                return i4 >= 1601;
            }
            i2 = i4 + 2000;
        }
        this.year = i2;
    }

    private Date parse0(CharSequence charSequence, int i2, int i3) {
        if (parse1(charSequence, i2, i3) && normalizeAndValidate()) {
            return computeDate();
        }
        return null;
    }

    private boolean parse1(CharSequence charSequence, int i2, int i3) {
        int i4 = -1;
        while (i2 < i3) {
            if (isDelim(charSequence.charAt(i2))) {
                if (i4 == -1) {
                    continue;
                } else {
                    if (parseToken(charSequence, i4, i2)) {
                        return true;
                    }
                    i4 = -1;
                }
            } else if (i4 == -1) {
                i4 = i2;
            }
            i2++;
        }
        return i4 != -1 && parseToken(charSequence, i4, charSequence.length());
    }

    public static Date parseHttpDate(CharSequence charSequence) {
        return parseHttpDate(charSequence, 0, charSequence.length());
    }

    public static Date parseHttpDate(CharSequence charSequence, int i2, int i3) {
        int i4 = i3 - i2;
        if (i4 == 0) {
            return null;
        }
        if (i4 < 0) {
            throw new IllegalArgumentException("Can't have end < start");
        }
        if (i4 <= 64) {
            return formatter().parse0((CharSequence) ObjectUtil.checkNotNull(charSequence, "txt"), i2, i3);
        }
        throw new IllegalArgumentException("Can't parse more than 64 chars,looks like a user error or a malformed header");
    }

    private boolean parseToken(CharSequence charSequence, int i2, int i3) {
        if (!this.timeFound) {
            boolean zTryParseTime = tryParseTime(charSequence, i2, i3);
            this.timeFound = zTryParseTime;
            if (zTryParseTime) {
                return this.dayOfMonthFound && this.monthFound && this.yearFound;
            }
        }
        if (!this.dayOfMonthFound) {
            boolean zTryParseDayOfMonth = tryParseDayOfMonth(charSequence, i2, i3);
            this.dayOfMonthFound = zTryParseDayOfMonth;
            if (zTryParseDayOfMonth) {
                return this.timeFound && this.monthFound && this.yearFound;
            }
        }
        if (!this.monthFound) {
            boolean zTryParseMonth = tryParseMonth(charSequence, i2, i3);
            this.monthFound = zTryParseMonth;
            if (zTryParseMonth) {
                return this.timeFound && this.dayOfMonthFound && this.yearFound;
            }
        }
        if (!this.yearFound) {
            this.yearFound = tryParseYear(charSequence, i2, i3);
        }
        return this.timeFound && this.dayOfMonthFound && this.monthFound && this.yearFound;
    }

    private boolean tryParseDayOfMonth(CharSequence charSequence, int i2, int i3) {
        int i4 = i3 - i2;
        if (i4 == 1) {
            char cCharAt = charSequence.charAt(i2);
            if (!isDigit(cCharAt)) {
                return false;
            }
            this.dayOfMonth = getNumericalValue(cCharAt);
            return true;
        }
        if (i4 != 2) {
            return false;
        }
        char cCharAt2 = charSequence.charAt(i2);
        char cCharAt3 = charSequence.charAt(i2 + 1);
        if (!isDigit(cCharAt2) || !isDigit(cCharAt3)) {
            return false;
        }
        this.dayOfMonth = (getNumericalValue(cCharAt2) * 10) + getNumericalValue(cCharAt3);
        return true;
    }

    private boolean tryParseMonth(CharSequence charSequence, int i2, int i3) {
        int i4;
        if (i3 - i2 != 3) {
            return false;
        }
        if (matchMonth("Jan", charSequence, i2)) {
            this.month = 0;
        } else if (matchMonth("Feb", charSequence, i2)) {
            this.month = 1;
        } else {
            if (matchMonth("Mar", charSequence, i2)) {
                i4 = 2;
            } else if (matchMonth("Apr", charSequence, i2)) {
                this.month = 3;
            } else if (matchMonth("May", charSequence, i2)) {
                i4 = 4;
            } else if (matchMonth("Jun", charSequence, i2)) {
                i4 = 5;
            } else if (matchMonth("Jul", charSequence, i2)) {
                i4 = 6;
            } else if (matchMonth("Aug", charSequence, i2)) {
                i4 = 7;
            } else if (matchMonth("Sep", charSequence, i2)) {
                i4 = 8;
            } else if (matchMonth("Oct", charSequence, i2)) {
                i4 = 9;
            } else if (matchMonth("Nov", charSequence, i2)) {
                i4 = 10;
            } else {
                if (!matchMonth("Dec", charSequence, i2)) {
                    return false;
                }
                i4 = 11;
            }
            this.month = i4;
        }
        return true;
    }

    private boolean tryParseTime(CharSequence charSequence, int i2, int i3) {
        int i4 = i3 - i2;
        if (i4 >= 5 && i4 <= 8) {
            int i5 = -1;
            int i6 = -1;
            int i7 = 0;
            int numericalValue = 0;
            int i8 = 0;
            while (i2 < i3) {
                char cCharAt = charSequence.charAt(i2);
                if (isDigit(cCharAt)) {
                    numericalValue = (numericalValue * 10) + getNumericalValue(cCharAt);
                    i7++;
                    if (i7 > 2) {
                        return false;
                    }
                } else {
                    if (cCharAt != ':' || i7 == 0) {
                        return false;
                    }
                    if (i8 != 0) {
                        if (i8 != 1) {
                            return false;
                        }
                        i6 = numericalValue;
                        numericalValue = i5;
                    }
                    i8++;
                    i7 = 0;
                    i5 = numericalValue;
                    numericalValue = 0;
                }
                i2++;
            }
            int i9 = i7 > 0 ? numericalValue : -1;
            if (i5 >= 0 && i6 >= 0 && i9 >= 0) {
                this.hours = i5;
                this.minutes = i6;
                this.seconds = i9;
                return true;
            }
        }
        return false;
    }

    private boolean tryParseYear(CharSequence charSequence, int i2, int i3) {
        char cCharAt;
        int numericalValue;
        int i4 = i3 - i2;
        if (i4 == 2) {
            char cCharAt2 = charSequence.charAt(i2);
            cCharAt = charSequence.charAt(i2 + 1);
            if (!isDigit(cCharAt2) || !isDigit(cCharAt)) {
                return false;
            }
            numericalValue = getNumericalValue(cCharAt2) * 10;
        } else {
            if (i4 != 4) {
                return false;
            }
            char cCharAt3 = charSequence.charAt(i2);
            char cCharAt4 = charSequence.charAt(i2 + 1);
            char cCharAt5 = charSequence.charAt(i2 + 2);
            cCharAt = charSequence.charAt(i2 + 3);
            if (!isDigit(cCharAt3) || !isDigit(cCharAt4) || !isDigit(cCharAt5) || !isDigit(cCharAt)) {
                return false;
            }
            numericalValue = (getNumericalValue(cCharAt5) * 10) + (getNumericalValue(cCharAt4) * 100) + (getNumericalValue(cCharAt3) * 1000);
        }
        this.year = numericalValue + getNumericalValue(cCharAt);
        return true;
    }

    public void reset() {
        this.timeFound = false;
        this.hours = -1;
        this.minutes = -1;
        this.seconds = -1;
        this.dayOfMonthFound = false;
        this.dayOfMonth = -1;
        this.monthFound = false;
        this.month = -1;
        this.yearFound = false;
        this.year = -1;
        this.cal.clear();
        this.sb.setLength(0);
    }
}
