/*
========================================================================================
Filename: 31_LoginRegistration.txt
Program 31: Create an app for Registration and Login Activity using database.
Files Included: MainActivity.java, RegisterActivity.java, LoginActivity.java, DatabaseHelper.java
========================================================================================

WHAT ALL TO DO / SETUP INSTRUCTIONS:
----------------------------------------------------------------------------------------
1. UI Components to Add (in res/layout/activity_main.xml):
   MainActivity (activity_main.xml):
     - 1 TextView: 'User Account'
     - 2 Button: 'Register' (onClick='openRegister'), 'Login' (onClick='openLogin')
   RegisterActivity (activity_register.xml):
     - 1 TextView: 'Registration'
     - 2 EditText (TextBox): username, password
     - 1 Button: 'Register' (onClick='register')
   LoginActivity (activity_login.xml):
     - 1 TextView: 'Login'
     - 2 EditText (TextBox): username, password
     - 1 Button: 'Login' (onClick='login')

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 LoginActivity and RegisterActivity:
   <activity android:name=".RegisterActivity" android:exported="false" />
   <activity android:name=".LoginActivity" android:exported="false" />

6. Additional Files & Resources Required:
   - Create DatabaseHelper.java (SQLite table 'users' with username and password), RegisterActivity.java, and LoginActivity.java.
========================================================================================
*/

// ======================================================================================
// File: MainActivity.java
// ======================================================================================
package com.example.loginregistration;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void openRegister(View view) {
        Intent intent = new Intent(MainActivity.this, RegisterActivity.class);
        startActivity(intent);
    }

    public void openLogin(View view) {
        Intent intent = new Intent(MainActivity.this, LoginActivity.class);
        startActivity(intent);
    }
}

// ======================================================================================
// File: RegisterActivity.java
// ======================================================================================
package com.example.loginregistration;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class RegisterActivity extends AppCompatActivity {
    EditText username, password;
    DatabaseHelper db;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        username = findViewById(R.id.username);
        password = findViewById(R.id.password);
        db = new DatabaseHelper(this);
    }
    public void register(View view) {
        String user = username.getText().toString();
        String pass = password.getText().toString();
        if (user.isEmpty() || pass.isEmpty()) {
            Toast.makeText(this,
                    "Enter all details",
                    Toast.LENGTH_SHORT).show();
            return;
        }
        boolean result = db.registerUser(user, pass);
        if (result) {
            Toast.makeText(this,
                    "Registration Successful",
                    Toast.LENGTH_SHORT).show();
            username.setText("");
            password.setText("");
        } else {
            Toast.makeText(this,
                    "Registration Failed",
                    Toast.LENGTH_SHORT).show();
        }
    }
}

// ======================================================================================
// File: LoginActivity.java
// ======================================================================================
package com.example.loginregistration;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class LoginActivity extends AppCompatActivity {
    EditText username, password;
    DatabaseHelper db;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        username = findViewById(R.id.username);
        password = findViewById(R.id.password);
        db = new DatabaseHelper(this);
    }
    public void login(View view) {
        String user = username.getText().toString();
        String pass = password.getText().toString();
        if (user.isEmpty() || pass.isEmpty()) {
            Toast.makeText(this,
                    "Enter all details",
                    Toast.LENGTH_SHORT).show();
            return;
        }
        boolean result = db.loginUser(user, pass);
        if (result) {
            Toast.makeText(this,
                    "Login Successful",
                    Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this,
                    "Invalid Username or Password",
                    Toast.LENGTH_SHORT).show();
        }
    }
}

// ======================================================================================
// File: DatabaseHelper.java
// ======================================================================================
package com.example.loginregistration;
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, "UserDB", null, 1);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE users(" +
                "id INTEGER PRIMARY KEY AUTOINCREMENT," +
                "username TEXT," +
                "password TEXT)");
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS users");
        onCreate(db);
    }
    public boolean registerUser(String username, String password) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("username", username);
        values.put("password", password);
        long result = db.insert("users", null, values);
        return result != -1;
    }
    public boolean loginUser(String username, String password) {
        SQLiteDatabase db = getReadableDatabase();
        Cursor cursor = db.rawQuery(
                "SELECT * FROM users WHERE username=? AND password=?",
                new String[]{username, password}
        );
        boolean result = cursor.getCount() > 0;
        cursor.close();
        return result;
    }
}
