/*
========================================================================================
Filename: 37_HospitalManagement.txt
Program 37: Hospital Management Multi-Activity Application (Patient Registration, Department Consultation, and Final Billing)
Files Included: MainActivity.java, DepartmentActivity.java, FinalBillActivity.java, main_menu.xml
========================================================================================

WHAT ALL TO DO / SETUP INSTRUCTIONS:
----------------------------------------------------------------------------------------
1. UI Components to Add (in res/layout/activity_main.xml):
   Activity 1 (activity_main.xml):
     - 3 EditText (TextBox): etPatientId, etName, etAge
     - 1 RadioGroup (rgGender) with 2 RadioButtons: Male, Female
     - 4 CheckBox: cbBloodTest (₹200), cbXray (₹500), cbScan (₹1000), cbMedicine (₹300)
     - 1 Button: btnNext ('Next / Continue')
   Activity 2 (activity_department.xml):
     - 1 RadioGroup (rgDepartment) with RadioButtons (General Medicine, Cardiology, Orthopedics)
     - 1 Button: btnCalculate ('Calculate Charges')
   Activity 3 (activity_final_bill.xml):
     - TextView: tvBill (formatted itemized invoice)

2. Layout Configuration:
   - ScrollView / LinearLayout with vertical orientation

3. Menu Configuration:
   - Create res/menu/main_menu.xml with menuHome ('Home'), menuNewRegistration ('New Registration'), menuExit ('Exit').

4. Themes Configuration (res/values/themes.xml):
   - Theme with ActionBar (Theme.MaterialComponents.DayNight.DarkActionBar).

5. AndroidManifest.xml:
   Register DepartmentActivity and FinalBillActivity inside <application>:
   <activity android:name=".DepartmentActivity" android:exported="false" />
   <activity android:name=".FinalBillActivity" android:exported="false" />

6. Additional Files & Resources Required:
   - Create DepartmentActivity.java and FinalBillActivity.java, receiving Intent extras and calculating grand total.
========================================================================================
*/

// ======================================================================================
// File: MainActivity.java
// ======================================================================================
package com.example.hospitalmanagement;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
    EditText etPatientId, etName, etAge;
    RadioGroup rgGender;
    CheckBox cbBloodTest, cbXray, cbScan, cbMedicine;
    Button btnNext;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        etPatientId = findViewById(R.id.etPatientId);
        etName = findViewById(R.id.etName);
        etAge = findViewById(R.id.etAge);
        rgGender = findViewById(R.id.rgGender);
        cbBloodTest = findViewById(R.id.cbBloodTest);
        cbXray = findViewById(R.id.cbXray);
        cbScan = findViewById(R.id.cbScan);
        cbMedicine = findViewById(R.id.cbMedicine);
        btnNext = findViewById(R.id.btnNext);
        btnNext.setOnClickListener(v -> validateAndNext());
    }
    private void validateAndNext() {
        String patientId = etPatientId.getText().toString().trim();
        String name = etName.getText().toString().trim();
        String age = etAge.getText().toString().trim();
        if (patientId.isEmpty()) {
            etPatientId.setError("Enter Patient ID");
            return;
        }
        if (name.isEmpty()) {
            etName.setError("Enter Patient Name");
            return;
        }
        if (age.isEmpty()) {
            etAge.setError("Enter Patient Age");
            return;
        }
        int genderId = rgGender.getCheckedRadioButtonId();
        if (genderId == -1) {
            Toast.makeText(this, "Select Gender", Toast.LENGTH_SHORT).show();
            return;
        }
        RadioButton genderButton = findViewById(genderId);
        String gender = genderButton.getText().toString();
        StringBuilder services = new StringBuilder();
        double serviceCharges = 0;
        if (cbBloodTest.isChecked()) {
            services.append("Blood Test\n");
            serviceCharges += 200;
        }
        if (cbXray.isChecked()) {
            services.append("X-Ray\n");
            serviceCharges += 500;
        }
        if (cbScan.isChecked()) {
            services.append("Scanning\n");
            serviceCharges += 1000;
        }
        if (cbMedicine.isChecked()) {
            services.append("Medicine\n");
            serviceCharges += 300;
        }
        if (services.length() == 0) {
            Toast.makeText(this,
                    "Select at least one medical service",
                    Toast.LENGTH_SHORT).show();
            return;
        }
        Intent intent = new Intent(MainActivity.this, DepartmentActivity.class);
        intent.putExtra("PATIENT_ID", patientId);
        intent.putExtra("NAME", name);
        intent.putExtra("AGE", age);
        intent.putExtra("GENDER", gender);
        intent.putExtra("SERVICES", services.toString());
        intent.putExtra("SERVICE_CHARGES", serviceCharges);
        startActivity(intent);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_menu, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == R.id.menuHome) {
            return true;
        }
        if (item.getItemId() == R.id.menuNewRegistration) {
            recreate();
            return true;
        }
        if (item.getItemId() == R.id.menuExit) {
            finishAffinity();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
// ======================================================================================

// ======================================================================================
// File: DepartmentActivity.java
// ======================================================================================
package com.example.hospitalmanagement;

import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;

public class DepartmentActivity extends AppCompatActivity {
    TextView tvPatient;
    RadioGroup rgDepartment;
    Button btnCalculate;
    String patientId, name, age, gender, services;
    double serviceCharges;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_department);
        tvPatient = findViewById(R.id.tvPatient);
        rgDepartment = findViewById(R.id.rgDepartment);
        btnCalculate = findViewById(R.id.btnCalculate);
        Intent intent = getIntent();
        patientId = intent.getStringExtra("PATIENT_ID");
        name = intent.getStringExtra("NAME");
        age = intent.getStringExtra("AGE");
        gender = intent.getStringExtra("GENDER");
        services = intent.getStringExtra("SERVICES");
        serviceCharges = intent.getDoubleExtra("SERVICE_CHARGES", 0);
        tvPatient.setText("Patient: " + name + "\nID: " + patientId);
        btnCalculate.setOnClickListener(v -> calculateCharges());
    }

    private void calculateCharges() {
        int departmentId = rgDepartment.getCheckedRadioButtonId();
        if (departmentId == -1) {
            Toast.makeText(this,                    "Select Consultation Department",                    Toast.LENGTH_SHORT).show();
            return;
        }

        RadioButton departmentButton = findViewById(departmentId);
        String department = departmentButton.getText().toString();
        double consultationFee = 0;
        if (department.equals("General Medicine")) {
            consultationFee = 300;
        }

        else if (department.equals("Cardiology")) {
            consultationFee = 800;
        }

        else if (department.equals("Orthopedics")) {
            consultationFee = 600;
        }

        double totalCharges = serviceCharges + consultationFee;
        Intent intent = new Intent(                DepartmentActivity.this,                FinalBillActivity.class);
        intent.putExtra("PATIENT_ID", patientId);
        intent.putExtra("NAME", name);
        intent.putExtra("AGE", age);
        intent.putExtra("GENDER", gender);
        intent.putExtra("SERVICES", services);
        intent.putExtra("DEPARTMENT", department);
        intent.putExtra("CONSULTATION_FEE", consultationFee);
        intent.putExtra("SERVICE_CHARGES", serviceCharges);
        intent.putExtra("TOTAL_CHARGES", totalCharges);
        startActivity(intent);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == R.id.menuHome) {
            Intent intent = new Intent(this, MainActivity.class);
            startActivity(intent);
            return true;
        }

        if (item.getItemId() == R.id.menuNewRegistration) {
            Intent intent = new Intent(this, MainActivity.class);
            startActivity(intent);
            return true;
        }

        if (item.getItemId() == R.id.menuExit) {
            finishAffinity();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

// ======================================================================================
// File: FinalBillActivity.java
// ======================================================================================
package com.example.hospitalmanagement;

import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

public class FinalBillActivity extends AppCompatActivity {
    TextView tvBill;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_final_bill);
        tvBill = findViewById(R.id.tvBill);
        Intent intent = getIntent();
        String patientId = intent.getStringExtra("PATIENT_ID");
        String name = intent.getStringExtra("NAME");
        String age = intent.getStringExtra("AGE");
        String gender = intent.getStringExtra("GENDER");
        String services = intent.getStringExtra("SERVICES");
        String department = intent.getStringExtra("DEPARTMENT");
        double consultationFee =                intent.getDoubleExtra("CONSULTATION_FEE", 0);
        double serviceCharges =                intent.getDoubleExtra("SERVICE_CHARGES", 0);
        double totalCharges =                intent.getDoubleExtra("TOTAL_CHARGES", 0);
        String category;
        if (totalCharges >= 1500) {
            category = "Premium Treatment";
        }

        else if (totalCharges >= 800) {
            category = "Standard Treatment";
        }

        else {
            category = "Basic Treatment";
        }

        String bill =                "Patient ID: " + patientId +                        "\nName: " + name +                        "\nAge: " + age +                        "\nGender: " + gender +                        "\n\nDepartment: " + department +                        "\n\nMedical Services:\n" + services +                        "\nConsultation Fee: ₹" +                        String.format("%.2f", consultationFee) +                        "\nService Charges: ₹" +                        String.format("%.2f", serviceCharges) +                        "\n\nTotal Charges: ₹" +                        String.format("%.2f", totalCharges) +                        "\n\nTreatment Category: " + category;
        tvBill.setText(bill);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == R.id.menuHome) {
            Intent intent = new Intent(this, MainActivity.class);
            startActivity(intent);
            return true;
        }

        if (item.getItemId() == R.id.menuNewRegistration) {
            Intent intent = new Intent(this, MainActivity.class);
            startActivity(intent);
            return true;
        }

        if (item.getItemId() == R.id.menuExit) {
            finishAffinity();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

// ======================================================================================
// File: res/menu/main_menu.xml
// ======================================================================================
<?xml version="1.0" ?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/menuHome" android:title="Home" app:showAsAction="never"/>
    <item android:id="@+id/menuNewRegistration" android:title="New Registration" app:showAsAction="never"/>
    <item android:id="@+id/menuExit" android:title="Exit" app:showAsAction="never"/>
</menu>

