package com.highway.tirebing;

import androidx.appcompat.app.AppCompatActivity;

import android.app.ProgressDialog;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Process;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;

import com.google.android.material.textfield.TextInputEditText;

import java.util.HashMap;

public class MainActivity extends BaseMainActivity implements View.OnClickListener,IBarcodeResult{
    private String TAG = "MainActivity_2D";
    private TextInputEditText  etBarcode;
    private Barcode2D barcode2D;
    // 标记是否正在扫描，防止重复触发
    private boolean isScanning = false;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        barcode2D = new Barcode2D(this);
        etBarcode = findViewById(R.id.etBarcode);
        initSound();
        initUHF();
        new InitTask().execute();// open();
    }
    private HashMap<Integer, Integer> soundMap = new HashMap<Integer, Integer>();
    private SoundPool soundPool;
    private float volumnRatio;
    private AudioManager am;

    private void initSound() {
        soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 5);
        soundMap.put(1, soundPool.load(this, R.raw.barcodebeep, 1));
        soundMap.put(2, soundPool.load(this, R.raw.serror, 1));
        am = (AudioManager) this.getSystemService(AUDIO_SERVICE);// 实例化AudioManager对象
    }
    /**
     * 播放提示音
     *
     * @param id 成功1，失败2
     */
    public void playSound(int id) {

        float audioMaxVolumn = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); // 返回当前AudioManager对象的最大音量值
        float audioCurrentVolumn = am.getStreamVolume(AudioManager.STREAM_MUSIC);// 返回当前AudioManager对象的音量值
        volumnRatio = audioCurrentVolumn / audioMaxVolumn;
        try {
            soundPool.play(soundMap.get(id), volumnRatio, // 左声道音量
                    volumnRatio, // 右声道音量
                    1, // 优先级，0为最低
                    0, // 循环次数，0无不循环，-1无永远循环
                    1 // 回放速度 ，该值在0.5-2.0之间，1为正常速度
            );
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    @Override
    protected void onDestroy() {
        Log.i(TAG, "onDestroy");
        close();
        super.onDestroy();
        android.os.Process.killProcess(Process.myPid());
    }

    @Override
    public void onClick(View v) {

    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // 检查是否是 KeyCode 139 (通常是扫描枪的触发键)
        if (keyCode == 139) {
            Log.d(TAG, "检测到扫描键按下 (KeyCode 139)");

            // 防止在正在扫描时重复触发，或者根据业务需求决定是否需要互斥
            if (!isScanning) {
                start();
            } else {
                // 如果已经在扫描，可以选择停止再重新开始，或者忽略
                // stop();
                // start();
                Log.d(TAG, "正在扫描中，忽略重复触发");
            }
            // 返回 true 表示我们已经处理了这个事件，不再传递给其他控件（如 EditText）
            // 如果返回 false，事件可能会继续传递，导致输入框也收到按键事件
            return true;
        }
        else if (keyCode == 293) {
            Log.d(TAG, "检测到 UHF 切换键 (293) - 执行：关闭 2D -> 打开 UHF");

            // A. 关闭 2D 扫描
            if (isScanning2D) {
                stop();
            }

            // B. 打开 UHF 扫描
            // 注意：请确保 initUHF() 是执行“打开”动作，或者你需要调用专门的 startUHF() 方法
            // 如果 initUHF() 只是初始化硬件，这里应该调用 startUHF()
            openUHF();

            // 可选：播放提示音表示模式切换成功
            // playSound(1);

            return true;
        }
        // 其他按键交给系统默认处理
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public void getBarcode(String barcode) {
        Log.d(TAG,barcode);
        playSound(1);
        etBarcode.setText(barcode);
        isScanning = false;
    }
    public class InitTask extends AsyncTask<String, Integer, Boolean> {
        ProgressDialog mypDialog;

        @Override
        protected Boolean doInBackground(String... params) {
            // TODO Auto-generated method stub
            try {
                open();
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return true;
        }

        @Override
        protected void onPostExecute(Boolean result) {
            super.onPostExecute(result);
            mypDialog.cancel();
        }

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            mypDialog = new ProgressDialog(MainActivity.this);
            mypDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            mypDialog.setMessage("init...");
            mypDialog.setCanceledOnTouchOutside(false);
            mypDialog.setCancelable(false);
            mypDialog.show();
        }
    }
    private void start() {
        Log.d(TAG, "执行 startScan");
        isScanning = true;
        if (barcode2D != null) {
            barcode2D.startScan(this);
        }

    }

    private void stop() {
        Log.d(TAG, "执行 stopScan");
        isScanning = false;
        if (barcode2D != null) {
            barcode2D.stopScan(this);
        }
    }

    private void open() {
        if (barcode2D != null) {
            barcode2D.open(this, this);
        }
    }

    private void close() {
        if (barcode2D != null) {
            barcode2D.stopScan(this);
            barcode2D.close(this);
        }
    }
}