package com.unibuy.v2.adapter

import android.graphics.PorterDuff
import android.widget.ImageView
import androidx.core.content.ContextCompat
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.unibuy.smartdevice.R
import com.unibuy.smartdevice.exception.LogsEmptyException
import com.unibuy.smartdevice.structure.SlotStructure
import com.unibuy.smartdevice.ui.tools.ImageGlide
import com.unibuy.v2.UnibuyHelper

/**
 * 購物車品項清單 Adapter（自 Luzui v2 移植）。
 * 依賴 BaseRecyclerViewAdapterHelper 的 BaseQuickAdapter。
 *
 * Disabled 按鈕規則：
 *  - buttonMinus：當 cartSelectedCount == 1 時 disabled（最低 1 件，不允許繼續減少）
 *  - buttonPlus ：當 cartSelectedCount >= slot.count（庫存上限）或全車總件數 >= 8 時 disabled
 * Disabled 外觀：背景換 bg_quantity_button_disabled、圖示染灰（#ADADAD）、clickable = false。
 */
class CartOperationAdapter(layoutResId: Int, data: MutableList<SlotStructure>) :
    BaseQuickAdapter<SlotStructure, BaseViewHolder>(layoutResId, data) {

    init {
        addChildClickViewIds(R.id.buttonMinus, R.id.buttonPlus, R.id.buttonWaste, R.id.layout_product, R.id.image_product)
    }

    override fun convert(holder: BaseViewHolder, item: SlotStructure) {
        val result = UnibuyHelper.getCartViewModel().createResult(item)
        val ctx = holder.itemView.context

        // 多國語商品名稱（統一由 ProductStructure 處理：i18n map → zh_TW → 舊 _en/_jp → 中文主值）
        val name = item.product.getLocalizedName(ctx)

        holder.setText(R.id.textProductName, name)
            .setText(R.id.totalPriceTextView, "NT$ ${result.currentItemPrice}")
            .setText(R.id.textStock, ctx.getString(R.string.stock_pieces_format, item.count))
            .setText(R.id.textQuantity, "${result.currentItemCount}")
            .setText(R.id.textPrice, "NT$ ${item.product.realPrice}")

        // ── 商品圖片 ────────────────────────────────────────────────────
        val imageProductPicture = holder.getView<ImageView>(R.id.image_product)
        try {
            ImageGlide(imageProductPicture.context).fileload(item.product.productImg, imageProductPicture)
        } catch (e: LogsEmptyException) {
            e.printStackTrace()
        }

        // ── 按鈕 Disabled 狀態判斷 ──────────────────────────────────────
        val buttonMinus = holder.getView<ImageView>(R.id.buttonMinus)
        val buttonPlus  = holder.getView<ImageView>(R.id.buttonPlus)

        val isAtMinCount   = item.cartSelectedCount <= 1
        val isAtStockLimit = item.cartSelectedCount >= item.count
        val isCartFull     = UnibuyHelper.getCartViewModel().hasMinimumCartItems()
        val isPlusDisabled = isAtStockLimit || isCartFull

        // ── 減少按鈕 ────────────────────────────────────────────────────
        applyButtonState(buttonMinus, disabled = isAtMinCount, ctx)

        // ── 增加按鈕 ────────────────────────────────────────────────────
        applyButtonState(buttonPlus, disabled = isPlusDisabled, ctx)
    }

    /**
     * 套用啟用 / 停用外觀到 ImageView 按鈕。
     *
     * @param button   目標按鈕
     * @param disabled true = 停用（light_gray 背景 + 灰色圖示 + 不可點擊）
     * @param ctx      Context（取色用）
     */
    private fun applyButtonState(button: ImageView, disabled: Boolean, ctx: android.content.Context) {
        if (disabled) {
            button.setBackgroundResource(R.drawable.bg_quantity_button_disabled)
            // setBackgroundResource 會重置 stateListAnimator，需立刻清除以防止陰影跳動
            button.stateListAnimator = null
            button.setColorFilter(
                ContextCompat.getColor(ctx, R.color.gray),
                PorterDuff.Mode.SRC_IN
            )
            button.isClickable = false
        } else {
            button.setBackgroundResource(R.drawable.bg_quantity_outline_button)
            // setBackgroundResource 會重置 stateListAnimator，需立刻清除以防止陰影跳動
            button.stateListAnimator = null
            button.clearColorFilter()
            button.isClickable = true
        }
    }
}

