package com.unibuy.smartdevice.ui;

import android.content.Context;
import android.view.View;

import com.unibuy.smartdevice.DialogAbstract;
import com.unibuy.smartdevice.MyApp;
import com.unibuy.smartdevice.structure.SlotStructure;
import com.unibuy.smartdevice.tools.HandlerMain;

/**
 * 銷售流程處理器（抽象基底）。
 *
 * 三種購買流程改由雲端 B014 {@code shopping_mode} 執行期切換，取代舊 project flavor 分家：
 * <ul>
 *   <li>{@code basic}        → {@link BasicSaleFlow}（多品項購物車，原 General）</li>
 *   <li>{@code employee_card}→ {@link EmployeeCardSaleFlow}（員工卡 B680，原 Chengwai）</li>
 *   <li>{@code pickup_sheet} → {@link PickupSheetSaleFlow}（掃碼醫令自動結帳，原 Cmuh）</li>
 * </ul>
 * 由 {@link #create} 依 {@link MyApp#getShoppingMode()} 建立對應策略。
 */
public abstract class SaleFlowHandler {

    protected final Context context;
    protected final SaleFlowCallback callback;
    protected final HandlerMain handlerMain;

    protected SaleFlowHandler(Context context, HandlerMain handlerMain, SaleFlowCallback callback) {
        this.context = context;
        this.handlerMain = handlerMain;
        this.callback = callback;
    }

    /** 依雲端 shopping_mode 建立對應的銷售流程策略（預設 basic）。 */
    public static SaleFlowHandler create(Context context, HandlerMain handlerMain, SaleFlowCallback callback) {
        String mode = MyApp.getInstance().getShoppingMode();
        if ("employee_card".equals(mode)) {
            return new EmployeeCardSaleFlow(context, handlerMain, callback);
        }
        if ("pickup_sheet".equals(mode)) {
            // 取物單模式下，若雲端開啟「領藥單」子開關 → 走雲端 B660 領藥流程；否則維持中國醫本地解密流程。
            if (MyApp.getInstance().getDevSet().isPharmacyPickup()) {
                return new PharmacyPickupSaleFlow(context, handlerMain, callback);
            }
            return new PickupSheetSaleFlow(context, handlerMain, callback);
        }
        return new BasicSaleFlow(context, handlerMain, callback);
    }

    public void onSetupUI() {
        onSetupUI(null);
    }

    public void onSetupUI(View rootView) {
        // 預設無動作
    }

    public void onBuyRequested() {
        // 預設無動作
    }

    public void onShoppingCartRequested() {
        // 預設：購物車浮鈕等同進入購買流程
        onBuyRequested();
    }

    public boolean handleProductSelected(SlotStructure slot) {
        // 預設：不消化商品點擊，交回 adapter 既有流程
        return false;
    }

    public Class<? extends DialogAbstract> cashDialogClass() {
        // 全模式統一用串口/USB 皆支援的強化版現金對話框（走 CashAcceptorFactory 依連線設定選傳輸）。
        // 舊的 CashPayDialog 只支援 USB，會在串口機台上跳「找不到 USB 轉接器」，故不再作為預設。
        return com.unibuy.smartdevice.ui.dialog.CashPayDialogGeneral.class;
    }

    public void onBarcodeReceived(String rawData) {
        // 預設無動作
    }

    /**
     * 語言切換時呼叫：FontendActivity 會重新 inflate 版面/容器，saleFlowHandler 內快取的 fragment
     * （如購物車）會變成掛在舊容器的孤兒 → 購買後再開會空白。子類在此清掉快取並移除舊 fragment。
     */
    public void onLocaleSwitched() {
        // 預設無動作
    }

    public void onPickupRequested() {
        // 預設無動作
    }
}
