/*
 * Copyright (C) 2022 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 com.android.launcher3.taskbar.navbutton

import android.content.res.Resources
import android.graphics.Color
import android.graphics.drawable.PaintDrawable
import android.view.Gravity
import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.LinearLayout
import com.android.launcher3.DeviceProfile
import com.android.launcher3.taskbar.navbutton.LayoutResourceHelper.DIMEN_TASKBAR_BACK_BUTTON_LEFT_MARGIN_KIDS
import com.android.launcher3.taskbar.navbutton.LayoutResourceHelper.DIMEN_TASKBAR_HOME_BUTTON_LEFT_MARGIN_KIDS
import com.android.launcher3.taskbar.navbutton.LayoutResourceHelper.DIMEN_TASKBAR_ICON_SIZE_KIDS
import com.android.launcher3.taskbar.navbutton.LayoutResourceHelper.DIMEN_TASKBAR_NAV_BUTTONS_CORNER_RADIUS_KIDS
import com.android.launcher3.taskbar.navbutton.LayoutResourceHelper.DIMEN_TASKBAR_NAV_BUTTONS_HEIGHT_KIDS
import com.android.launcher3.taskbar.navbutton.LayoutResourceHelper.DIMEN_TASKBAR_NAV_BUTTONS_WIDTH_KIDS
import com.android.launcher3.taskbar.navbutton.LayoutResourceHelper.DRAWABLE_SYSBAR_BACK_KIDS
import com.android.launcher3.taskbar.navbutton.LayoutResourceHelper.DRAWABLE_SYSBAR_HOME_KIDS

class KidsNavLayoutter(
    resources: Resources,
    navBarContainer: LinearLayout,
    endContextualContainer: ViewGroup,
    startContextualContainer: ViewGroup
) :
    AbstractNavButtonLayoutter(
        resources,
        navBarContainer,
        endContextualContainer,
        startContextualContainer
    ) {

    override fun layoutButtons(dp: DeviceProfile, isContextualButtonShowing: Boolean) {
        val iconSize: Int = resources.getDimensionPixelSize(DIMEN_TASKBAR_ICON_SIZE_KIDS)
        val buttonWidth: Int = resources.getDimensionPixelSize(DIMEN_TASKBAR_NAV_BUTTONS_WIDTH_KIDS)
        val buttonHeight: Int =
            resources.getDimensionPixelSize(DIMEN_TASKBAR_NAV_BUTTONS_HEIGHT_KIDS)
        val buttonRadius: Int =
            resources.getDimensionPixelSize(DIMEN_TASKBAR_NAV_BUTTONS_CORNER_RADIUS_KIDS)
        val paddingLeft = (buttonWidth - iconSize) / 2
        val paddingTop = (buttonHeight - iconSize) / 2

        // Update icons
        backButton.setImageDrawable(backButton.context.getDrawable(DRAWABLE_SYSBAR_BACK_KIDS))
        backButton.scaleType = ImageView.ScaleType.FIT_CENTER
        backButton.setPadding(paddingLeft, paddingTop, paddingLeft, paddingTop)
        homeButton.setImageDrawable(homeButton.getContext().getDrawable(DRAWABLE_SYSBAR_HOME_KIDS))
        homeButton.scaleType = ImageView.ScaleType.FIT_CENTER
        homeButton.setPadding(paddingLeft, paddingTop, paddingLeft, paddingTop)

        // Home button layout
        val homeLayoutparams = LinearLayout.LayoutParams(buttonWidth, buttonHeight)
        val homeButtonLeftMargin: Int =
            resources.getDimensionPixelSize(DIMEN_TASKBAR_HOME_BUTTON_LEFT_MARGIN_KIDS)
        homeLayoutparams.setMargins(homeButtonLeftMargin, 0, 0, 0)
        homeButton.layoutParams = homeLayoutparams

        // Back button layout
        val backLayoutParams = LinearLayout.LayoutParams(buttonWidth, buttonHeight)
        val backButtonLeftMargin: Int =
            resources.getDimensionPixelSize(DIMEN_TASKBAR_BACK_BUTTON_LEFT_MARGIN_KIDS)
        backLayoutParams.setMargins(backButtonLeftMargin, 0, 0, 0)
        backButton.layoutParams = backLayoutParams

        // Button backgrounds
        val whiteWith10PctAlpha = Color.argb(0.1f, 1f, 1f, 1f)
        val buttonBackground = PaintDrawable(whiteWith10PctAlpha)
        buttonBackground.setCornerRadius(buttonRadius.toFloat())
        homeButton.background = buttonBackground
        backButton.background = buttonBackground

        // Update alignment within taskbar
        val navButtonsLayoutParams = navButtonContainer.layoutParams as FrameLayout.LayoutParams
        navButtonsLayoutParams.apply {
            marginStart = navButtonsLayoutParams.marginEnd / 2
            marginEnd = navButtonsLayoutParams.marginStart
            gravity = Gravity.CENTER
        }
        navButtonContainer.requestLayout()

        homeButton.onLongClickListener = null
    }
}
