/*
========================================================================================
Filename: 25_StudentDatabase.txt
Program 25: Create an app to insert name and age with an add button with toast and a view details button to show all details from student table.
Files Included: MainActivity.java, DatabaseHelper.java, ViewDetailsActivity.java
========================================================================================

WHAT ALL TO DO / SETUP INSTRUCTIONS:
----------------------------------------------------------------------------------------
1. UI Components to Add (in res/layout/activity_main.xml):
   In activity_main.xml:
     - 2 EditText (TextBox): etName (Student Name), etAge (Age, inputType='number')
     - 2 Button: btnAdd ('Add Student', onClick='addStudent'), btnView ('View Details', onClick='viewDetails')
     - 1 TextView: tvTitle ('Student Database')
   In activity_view_details.xml:
     - 2 TextView: tvTitle ('Student Details'), tvDetails (to list records)

2. Layout Configuration:
   - LinearLayout (vertical, gravity='center', padding 20dp)

3. Menu Configuration:
   - None required.

4. Themes Configuration (res/values/themes.xml):
   - Theme.MaterialComponents.DayNight.NoActionBar in themes.xml.

5. AndroidManifest.xml:
   Register ViewDetailsActivity:
   <activity android:name=".ViewDetailsActivity" android:exported="false" />

6. Additional Files & Resources Required:
   - Create DatabaseHelper.java (SQLiteOpenHelper creating table 'student' with id, name, age) and ViewDetailsActivity.java.
========================================================================================
*/

// ======================================================================================
// File: MainActivity.java
// ======================================================================================
package com.example.studentdatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
    EditText etName, etAge;
    DatabaseHelper db;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        etName = findViewById(R.id.etName);
        etAge = findViewById(R.id.etAge);
        db = new DatabaseHelper(this);
    }
    public void addStudent(View view) {
        String name = etName.getText().toString();
        String age = etAge.getText().toString();
        if (name.isEmpty() || age.isEmpty()) {
            Toast.makeText(this,
                    "Enter all details",
                    Toast.LENGTH_SHORT).show();
            return;
        }
        boolean inserted = db.insertStudent(name, age);
        if (inserted) {
            Toast.makeText(this,
                    "Row Inserted Successfully",
                    Toast.LENGTH_SHORT).show();
            etName.setText("");
            etAge.setText("");
        }
    }
    public void viewDetails(View view) {
        startActivity(new android.content.Intent(
                this, ViewDetailsActivity.class));
    }
}

// ======================================================================================
// File: DatabaseHelper.java
// ======================================================================================
package com.example.studentdatabase;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper {
    public DatabaseHelper(Context context) {
        super(context, "StudentDB", null, 1);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(
                "CREATE TABLE student(" +
                        "id INTEGER PRIMARY KEY AUTOINCREMENT," +
                        "name TEXT," +
                        "age INTEGER)"
        );
    }
    @Override
    public void onUpgrade(SQLiteDatabase db,
                          int oldVersion,
                          int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS student");
        onCreate(db);
    }
    public boolean insertStudent(String name, String age) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("name", name);
        values.put("age", age);
        long result = db.insert("student", null, values);
        return result != -1;
    }
    public Cursor getStudents() {
        SQLiteDatabase db = getReadableDatabase();
        return db.rawQuery(
                "SELECT * FROM student",
                null
        );
    }
}

// ======================================================================================
// File: ViewDetailsActivity.java
// ======================================================================================
package com.example.studentdatabase;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class ViewDetailsActivity extends AppCompatActivity {
    TextView tvDetails;
    DatabaseHelper db;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_details);
        tvDetails = findViewById(R.id.tvDetails);
        db = new DatabaseHelper(this);
        Cursor cursor = db.getStudents();
        StringBuilder data = new StringBuilder();
        while (cursor.moveToNext()) {
            data.append("ID : ")
                    .append(cursor.getString(0))
                    .append("\n");
            data.append("Name : ")
                    .append(cursor.getString(1))
                    .append("\n");
            data.append("Age : ")
                    .append(cursor.getString(2))
                    .append("\n\n");
        }
        cursor.close();
        tvDetails.setText(data.toString());
    }
}
