/*
 * Copyright 2021 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package androidx.wear.watchface

import android.app.PendingIntent
import android.content.res.Resources
import android.graphics.Rect
import androidx.wear.watchface.complications.data.ComplicationText
import java.time.Instant
import java.util.Objects

/**
 * Describes regions of the watch face for use by a screen reader.
 *
 * @param text [ComplicationText] associated with the region, to be read by the screen reader.
 * @param bounds [Rect] describing the area of the feature on screen.
 * @param tapAction [PendingIntent] to be used if the screen reader's user triggers a tap
 * action.
 */
public class ContentDescriptionLabel(
    public val text: ComplicationText,
    public val bounds: Rect,
    public val tapAction: PendingIntent?
) {
    /**
     * Returns the text that should be displayed for the given timestamp.
     *
     * @param resources [Resources] from the current [android.content.Context]
     * @param instant the [Instant] at which to sample the text
     */
    public fun getTextAt(resources: Resources, instant: Instant): CharSequence =
        text.getTextAt(resources, instant)

    override fun equals(other: Any?): Boolean =
        other is ContentDescriptionLabel &&
            text == other.text &&
            bounds == other.bounds &&
            tapAction == other.tapAction

    override fun hashCode(): Int {
        return Objects.hash(
            text,
            bounds,
            tapAction
        )
    }
}