//main_activity.java

package com.example.moviereview;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.*;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private EditText movieNameEditText, movieYearEditText, movieReviewEditText;
    private RatingBar movieRatingBar;
    private Button saveReviewButton, viewReviewsButton;
    private TextView detailsHeaderTextView, movieDetailsTextView;
    private ScrollView movieDetailsScrollView;
    private LinearLayout addReviewLayout;

    private SQLiteDatabase database;

    private static final String DATABASE_NAME = "MovieReviews";
    private static final String TABLE_REVIEWS = "reviews";
    private static final String COLUMN_NAME = "name";
    private static final String COLUMN_YEAR = "year";
    private static final String COLUMN_RATING = "rating";
    private static final String COLUMN_REVIEW = "review";

    private boolean isInViewMode = false;

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

        movieNameEditText = findViewById(R.id.movieNameEditText);
        movieYearEditText = findViewById(R.id.movieYearEditText);
        movieReviewEditText = findViewById(R.id.movieReviewEditText);
        movieRatingBar = findViewById(R.id.movieRatingBar);
        saveReviewButton = findViewById(R.id.saveReviewButton);
        viewReviewsButton = findViewById(R.id.viewReviewsButton);
        detailsHeaderTextView = findViewById(R.id.detailsHeaderTextView);
        movieDetailsTextView = findViewById(R.id.movieDetailsTextView);
        movieDetailsScrollView = findViewById(R.id.movieDetailsScrollView);
        addReviewLayout = findViewById(R.id.addReviewLayout);

        database = openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null);

        database.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_REVIEWS + " (" +
                "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                COLUMN_NAME + " TEXT UNIQUE, " +
                COLUMN_YEAR + " INTEGER, " +
                COLUMN_RATING + " REAL, " +
                COLUMN_REVIEW + " TEXT)");

        saveReviewButton.setOnClickListener(v -> saveMovieReview());
        viewReviewsButton.setOnClickListener(v -> toggleViewMode());
    }

    private void saveMovieReview() {
        String name = movieNameEditText.getText().toString().trim();
        String yearStr = movieYearEditText.getText().toString().trim();
        String review = movieReviewEditText.getText().toString().trim();
        float rating = movieRatingBar.getRating();

        if (name.isEmpty() || yearStr.isEmpty()) {
            Toast.makeText(this, "Please enter movie name and year", Toast.LENGTH_SHORT).show();
            return;
        }

        try {
            int year = Integer.parseInt(yearStr);

            ContentValues values = new ContentValues();
            values.put(COLUMN_NAME, name);
            values.put(COLUMN_YEAR, year);
            values.put(COLUMN_RATING, rating);
            values.put(COLUMN_REVIEW, review);

            long id = database.insertWithOnConflict(TABLE_REVIEWS, null, values, SQLiteDatabase.CONFLICT_REPLACE);

            if (id == -1) {
                Toast.makeText(this, "Error saving review", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "Review saved", Toast.LENGTH_SHORT).show();
            }

            movieNameEditText.setText("");
            movieYearEditText.setText("");
            movieReviewEditText.setText("");
            movieRatingBar.setRating(0);

        } catch (NumberFormatException e) {
            Toast.makeText(this, "Invalid year", Toast.LENGTH_SHORT).show();
        }
    }

    private void toggleViewMode() {
        isInViewMode = !isInViewMode;

        if (isInViewMode) {
            addReviewLayout.setVisibility(View.GONE);
            detailsHeaderTextView.setVisibility(View.VISIBLE);
            movieDetailsScrollView.setVisibility(View.VISIBLE);
            viewReviewsButton.setText("Add Review");
            displayAllReviews();
        } else {
            addReviewLayout.setVisibility(View.VISIBLE);
            detailsHeaderTextView.setVisibility(View.GONE);
            movieDetailsScrollView.setVisibility(View.GONE);
            viewReviewsButton.setText("View Reviews");
        }
    }

    private void displayAllReviews() {
        Cursor cursor = database.rawQuery("SELECT * FROM " + TABLE_REVIEWS + " ORDER BY " + COLUMN_NAME, null);
        StringBuilder builder = new StringBuilder();

        if (cursor.moveToFirst()) {
            do {
                String name = cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_NAME));
                int year = cursor.getInt(cursor.getColumnIndexOrThrow(COLUMN_YEAR));
                float rating = cursor.getFloat(cursor.getColumnIndexOrThrow(COLUMN_RATING));
                String review = cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_REVIEW));

                builder.append("🎬 ").append(name).append(" (").append(year).append(")\n");
                builder.append("⭐ Rating: ").append(rating).append("/5\n");
                builder.append("📝 Review: ").append(review).append("\n\n");
            } while (cursor.moveToNext());
        } else {
            builder.append("No reviews found.");
        }

        cursor.close();
        movieDetailsTextView.setText(builder.toString());
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        database.close();
    }
}

//mainactivity.xml