/*
========================================================================================
Filename: 26_LibraryManagement.txt
Program 26: Create an app for library management insert the following details to db: book_id, book_name, publisher, author, published_year, price, stock and a view button to view details of all books.
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:
     - 7 EditText (TextBox): etBookId, etBookName, etAuthor, etPublisher, etYear, etPrice, etStock
     - 2 Button: btnAdd ('Add Book', onClick='addBook'), btnView ('View Details', onClick='viewBooks')
     - 1 TextView: heading 'Library Management'
   In activity_view_details.xml:
     - 2 TextView: heading 'Book Details', tvDetails (scrollable list of books)

2. Layout Configuration:
   - ScrollView with vertical LinearLayout

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 (SQLite database table 'books' with book_id, book_name, author, publisher, year, price, stock) and ViewDetailsActivity.java.
========================================================================================
*/

// ======================================================================================
// File: MainActivity.java
// ======================================================================================
package com.example.librarymanagement;
import android.content.Intent;
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 etBookId, etBookName, etAuthor, etPublisher;
    EditText etYear, etPrice, etStock;
    DatabaseHelper db;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        etBookId = findViewById(R.id.etBookId);
        etBookName = findViewById(R.id.etBookName);
        etAuthor = findViewById(R.id.etAuthor);
        etPublisher = findViewById(R.id.etPublisher);
        etYear = findViewById(R.id.etYear);
        etPrice = findViewById(R.id.etPrice);
        etStock = findViewById(R.id.etStock);
        db = new DatabaseHelper(this);
    }
    public void addBook(View view) {
        String id = etBookId.getText().toString();
        String name = etBookName.getText().toString();
        String author = etAuthor.getText().toString();
        String publisher = etPublisher.getText().toString();
        String year = etYear.getText().toString();
        String price = etPrice.getText().toString();
        String stock = etStock.getText().toString();
        if (id.isEmpty() || name.isEmpty() ||
                author.isEmpty() || publisher.isEmpty() ||
                year.isEmpty() || price.isEmpty() ||
                stock.isEmpty()) {
            Toast.makeText(this,
                    "Enter all details",
                    Toast.LENGTH_SHORT).show();
            return;
        }
        boolean inserted = db.insertBook(
                id, name, author, publisher,
                year, price, stock
        );
        if (inserted) {
            Toast.makeText(this,
                    "Book Inserted Successfully",
                    Toast.LENGTH_SHORT).show();
            etBookId.setText("");
            etBookName.setText("");
            etAuthor.setText("");
            etPublisher.setText("");
            etYear.setText("");
            etPrice.setText("");
            etStock.setText("");
        }
    }
    public void viewBooks(View view) {
        Intent intent = new Intent(
                this,
                ViewDetailsActivity.class
        );
        startActivity(intent);
    }
}

// ======================================================================================
// File: DatabaseHelper.java
// ======================================================================================
package com.example.librarymanagement;
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, "LibraryDB", null, 1);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(
                "CREATE TABLE book(" +
                        "bookid TEXT PRIMARY KEY," +
                        "bookname TEXT," +
                        "author TEXT," +
                        "publisher TEXT," +
                        "year INTEGER," +
                        "price REAL," +
                        "stock INTEGER)"
        );
    }
    @Override
    public void onUpgrade(SQLiteDatabase db,
                          int oldVersion,
                          int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS book");
        onCreate(db);
    }
    public boolean insertBook(
            String id,
            String name,
            String author,
            String publisher,
            String year,
            String price,
            String stock) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("bookid", id);
        values.put("bookname", name);
        values.put("author", author);
        values.put("publisher", publisher);
        values.put("year", year);
        values.put("price", price);
        values.put("stock", stock);
        long result = db.insert(
                "book",
                null,
                values
        );
        return result != -1;
    }
    public Cursor getBooks() {
        SQLiteDatabase db = getReadableDatabase();
        return db.rawQuery(
                "SELECT * FROM book",
                null
        );
    }
}

// ======================================================================================
// File: ViewDetailsActivity.java
// ======================================================================================
package com.example.librarymanagement;
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.getBooks();
        StringBuilder data = new StringBuilder();
        while (cursor.moveToNext()) {
            data.append("Book ID : ")
                    .append(cursor.getString(0))
                    .append("\n");
            data.append("Book Name : ")
                    .append(cursor.getString(1))
                    .append("\n");
            data.append("Author : ")
                    .append(cursor.getString(2))
                    .append("\n");
            data.append("Publisher : ")
                    .append(cursor.getString(3))
                    .append("\n");
            data.append("Published Year : ")
                    .append(cursor.getString(4))
                    .append("\n");
            data.append("Price : ")
                    .append(cursor.getString(5))
                    .append("\n");
            data.append("Stock : ")
                    .append(cursor.getString(6))
                    .append("\n\n");
        }
        cursor.close();
        tvDetails.setText(data.toString());
    }
}
