package com.babysitter.app;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.TextView;

/**
 * מסך ההגדרות הראשי.
 * מכשיר זה משמש כ"קלט" (נשאר בחדר הילדים).
 * המכשיר השני (של ההורה) לא צריך אפליקציה בכלל - הוא רק מקבל שיחה רגילה.
 *
 * המסך בנוי לניווט עם מקשים פיזיים (D-pad/חצים) ולא מסך מגע:
 * שדה טקסט -> RadioGroup לבחירת רגישות -> כפתור התחל/עצור, בסדר הזה.
 *
 * מרחיב Activity רגיל (לא AppCompatActivity) - בבדיקת שתי אפליקציות אמיתיות
 * שעובדות על מכשירי שיאומי מקשים, אף אחת מהן לא השתמשה ב-AndroidX/AppCompat.
 */
public class MainActivity extends Activity {

    public static final String PREFS_NAME = "babysitter_prefs";
    public static final String KEY_PHONE = "phone_number";
    public static final String KEY_SENSITIVITY = "sensitivity";
    public static final String KEY_RUNNING = "is_running";

    // ערכי רגישות (0=הכי רגיש, 100=הכי פחות רגיש) - תואם לנוסחת הסף בשירות
    private static final int SENSITIVITY_HIGH = 0;
    private static final int SENSITIVITY_MEDIUM = 40;
    private static final int SENSITIVITY_LOW = 80;

    private EditText phoneNumberInput;
    private RadioGroup sensitivityGroup;
    private Button startStopButton;
    private TextView statusText;
    private SharedPreferences prefs;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);

        phoneNumberInput = findViewById(R.id.phoneNumberInput);
        sensitivityGroup = findViewById(R.id.sensitivityGroup);
        startStopButton = findViewById(R.id.startStopButton);
        statusText = findViewById(R.id.statusText);

        phoneNumberInput.setText(prefs.getString(KEY_PHONE, ""));
        setSensitivitySelection(prefs.getInt(KEY_SENSITIVITY, SENSITIVITY_MEDIUM));

        updateUiState(prefs.getBoolean(KEY_RUNNING, false));

        startStopButton.setOnClickListener(v -> {
            boolean running = prefs.getBoolean(KEY_RUNNING, false);
            if (running) {
                stopListening();
            } else {
                startListening();
            }
        });

        // התחלת המיקוד בשדה הטלפון, כדי שניווט עם מקשים יתחיל מקום הגיוני
        phoneNumberInput.requestFocus();
    }

    private void setSensitivitySelection(int savedValue) {
        if (savedValue <= SENSITIVITY_HIGH) {
            sensitivityGroup.check(R.id.sensitivityHigh);
        } else if (savedValue >= SENSITIVITY_LOW) {
            sensitivityGroup.check(R.id.sensitivityLow);
        } else {
            sensitivityGroup.check(R.id.sensitivityMedium);
        }
    }

    private int getSelectedSensitivity() {
        int checkedId = sensitivityGroup.getCheckedRadioButtonId();
        if (checkedId == R.id.sensitivityHigh) return SENSITIVITY_HIGH;
        if (checkedId == R.id.sensitivityLow) return SENSITIVITY_LOW;
        return SENSITIVITY_MEDIUM;
    }

    private void startListening() {
        String phone = phoneNumberInput.getText().toString().trim();
        if (phone.isEmpty()) {
            phoneNumberInput.setError("יש להזין מספר טלפון");
            phoneNumberInput.requestFocus();
            return;
        }

        SharedPreferences.Editor editor = prefs.edit();
        editor.putString(KEY_PHONE, phone);
        editor.putInt(KEY_SENSITIVITY, getSelectedSensitivity());
        editor.putBoolean(KEY_RUNNING, true);
        editor.apply();

        Intent serviceIntent = new Intent(this, CryDetectionService.class);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            startForegroundService(serviceIntent);
        } else {
            startService(serviceIntent);
        }

        updateUiState(true);
    }

    private void stopListening() {
        prefs.edit().putBoolean(KEY_RUNNING, false).apply();
        stopService(new Intent(this, CryDetectionService.class));
        updateUiState(false);
    }

    private void updateUiState(boolean running) {
        if (running) {
            statusText.setText(R.string.status_listening);
            startStopButton.setText(R.string.stop_listening);
            phoneNumberInput.setEnabled(false);
            setRadioGroupEnabled(false);
        } else {
            statusText.setText(R.string.status_idle);
            startStopButton.setText(R.string.start_listening);
            phoneNumberInput.setEnabled(true);
            setRadioGroupEnabled(true);
        }
    }

    private void setRadioGroupEnabled(boolean enabled) {
        for (int i = 0; i < sensitivityGroup.getChildCount(); i++) {
            sensitivityGroup.getChildAt(i).setEnabled(enabled);
        }
    }
}
