package com.android.incallui;

import android.content.res.Resources;
import android.content.res.TypedArray;
import android.telecom.PhoneAccount;

import com.android.contacts.common.util.MaterialColorMapUtils;
import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;

public class InCallUIMaterialColorMapUtils extends MaterialColorMapUtils {
    private final TypedArray sPrimaryColors;
    private final TypedArray sSecondaryColors;
    private final Resources mResources;

    public InCallUIMaterialColorMapUtils(Resources resources) {
        super(resources);
        sPrimaryColors = resources.obtainTypedArray(
                com.android.incallui.R.array.background_colors);
        sSecondaryColors = resources.obtainTypedArray(
                com.android.incallui.R.array.background_colors_dark);
        mResources = resources;
    }

    /**
     * Currently the InCallUI color will only vary by SIM color which is a list of colors
     * defined in the background_colors array, so first search the list for the matching color and
     * fall back to the closest matching color if an exact match does not exist.
     */
    @Override
    public MaterialPalette calculatePrimaryAndSecondaryColor(int color) {
        if (color == PhoneAccount.NO_HIGHLIGHT_COLOR) {
            return getDefaultPrimaryAndSecondaryColors(mResources);
        }

        for (int i = 0; i < sPrimaryColors.length(); i++) {
            if (sPrimaryColors.getColor(i, 0) == color) {
                return new MaterialPalette(
                        sPrimaryColors.getColor(i, 0),
                        sSecondaryColors.getColor(i, 0));
            }
        }

        // The color isn't in the list, so use the superclass to find an approximate color.
        return super.calculatePrimaryAndSecondaryColor(color);
    }

    public static MaterialPalette getDefaultPrimaryAndSecondaryColors(Resources resources) {
        final int primaryColor = resources.getColor(R.color.dialer_theme_color);
        final int secondaryColor = resources.getColor(R.color.dialer_theme_color_dark);
        return new MaterialPalette(primaryColor, secondaryColor);
    }
}