/*
 * Copyright (C) 2020 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.settings.development;

import android.content.Context;
import android.content.res.Resources;
import android.view.View;
import android.widget.TextView;

import com.android.settings.R;

/**
 * The class for allowing UIs like {@link AdbWirelessDialog} and {@link AdbWirelessDialogUiBase} to
 * share the logic for controlling buttons, text fields, etc.
 */
public class AdbWirelessDialogController {
    private static final String TAG = "AdbWirelessDialogCtrl";

    private final AdbWirelessDialogUiBase mUi;
    private final View mView;

    private int mMode;

    // The dialog for showing the six-digit code
    private TextView mPairingCodeTitle;
    private TextView mSixDigitCode;
    private TextView mIpAddr;

    // The dialog for showing pairing failed message
    private TextView mFailedMsg;

    private Context mContext;

    public AdbWirelessDialogController(AdbWirelessDialogUiBase parent, View view,
            int mode) {
        mUi = parent;
        mView = view;
        mMode = mode;

        mContext = mUi.getContext();
        final Resources res = mContext.getResources();

        mSixDigitCode = mView.findViewById(R.id.pairing_code);
        mIpAddr = mView.findViewById(R.id.ip_addr);

        switch (mMode) {
            case AdbWirelessDialogUiBase.MODE_PAIRING:
                String title = res.getString(
                        com.android.settingslib.R.string.adb_pairing_device_dialog_title);
                mUi.setTitle(title);
                mView.findViewById(R.id.l_pairing_six_digit).setVisibility(View.VISIBLE);
                mUi.setCancelButton(res.getString(R.string.cancel));
                mUi.setCanceledOnTouchOutside(false);
                break;
            case AdbWirelessDialogUiBase.MODE_PAIRING_FAILED:
                String msg = res.getString(
                        com.android.settingslib.R.string.adb_pairing_device_dialog_failed_msg);
                mUi.setTitle(
                        com.android.settingslib.R.string.adb_pairing_device_dialog_failed_title);
                mView.findViewById(R.id.l_pairing_failed).setVisibility(View.VISIBLE);
                mFailedMsg = (TextView) mView.findViewById(R.id.pairing_failed_label);
                mFailedMsg.setText(msg);
                mUi.setSubmitButton(res.getString(R.string.okay));
                break;
            case AdbWirelessDialogUiBase.MODE_QRCODE_FAILED:
                mUi.setTitle(
                        com.android.settingslib.R.string.adb_pairing_device_dialog_failed_title);
                mView.findViewById(R.id.l_qrcode_pairing_failed).setVisibility(View.VISIBLE);
                mUi.setSubmitButton(res.getString(R.string.okay));
                break;
        }

        // After done view show and hide, request focus from parent view
        mView.findViewById(R.id.l_adbwirelessdialog).requestFocus();
    }

    /**
     * Set the pairing code UI text field to code.
     *
     * @param code the pairing code string
     */
    public void setPairingCode(String code) {
        mSixDigitCode.setText(code);
    }

    /**
     * Set the Ip address UI text field to ipAddr.
     *
     * @param ipAddr the ip address string
     */
    public void setIpAddr(String ipAddr) {
        mIpAddr.setText(ipAddr);
    }
}