Untitled

 avatar
unknown
plain_text
2 years ago
40 kB
4
Indexable
package com.example.tdchotel_manager.Menu_QuanLy;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.Toast;

import com.example.tdchotel_manager.Menu_QuanLy.Adapter_Phong.ImageAdapter;
import com.example.tdchotel_manager.Menu_QuanLy.Adapter_Phong.adapter_dich_vu_phong;
import com.example.tdchotel_manager.Menu_QuanLy.Adapter_Phong.adapter_tien_nghi;
import com.example.tdchotel_manager.Model.chi_tiet_dich_vu_phong;
import com.example.tdchotel_manager.Model.chi_tiet_tien_nghi;
import com.example.tdchotel_manager.Model.phong;
import com.example.tdchotel_manager.Model.trang_thai_phong;
import com.example.tdchotel_manager.R;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.android.gms.tasks.Tasks;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Activity_Thong_Tin_Phong extends AppCompatActivity {
    Spinner sp_status;
    RecyclerView rcv_anhphong;
    ImageButton btn_back, btn_save, ibChosseImg;
    EditText edt_name, edt_description, edt_price, edt_sale;
    RadioGroup radiogroup;
    ArrayList<trang_thai_phong> list_status = new ArrayList<>();
    private RecyclerView rcv_tien_nghi, rcv_dich_vu_phong;
    private ArrayList<String> list_ten_anh = new ArrayList<>();
    private adapter_tien_nghi adapterTienNghi = new adapter_tien_nghi();
    private adapter_dich_vu_phong adapterDichVuPhong = new adapter_dich_vu_phong();
    ArrayList<chi_tiet_dich_vu_phong> list_chi_tietDVP = new ArrayList<>();
    ArrayList<chi_tiet_tien_nghi> list_chi_tietTN = new ArrayList<>();
    //danh sách tải về tiện nghi của phòng
    ArrayList<chi_tiet_tien_nghi> list_tiennghi_dowload = new ArrayList<>();
    String IDphong = "";
    ArrayList<Uri> picture_list = new ArrayList<>();
    private ImageView currentSelectedImageView;
    private static final int REQUEST_IMAGE_CAPTURE = 1;
    private static final int REQUEST_IMAGE_PICK = 2;
    ProgressBar progressBar_luuphong;
    ImageAdapter imageAdapter;
    phong thong_tin_phong;
    View viewBlocking;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_thong_tin_chi_tiet_phong);
        Intent intent = getIntent();
        thong_tin_phong = (phong) intent.getSerializableExtra("phong");
        setControl();
        imageAdapter = new ImageAdapter(this, picture_list);
        rcv_anhphong.setAdapter(imageAdapter);
        rcv_anhphong.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
        loadTrangThaiPhong();
        setEvent();// Method call to load room status from Firebase
        if (thong_tin_phong != null) {
            fill_data(thong_tin_phong);
        }
    }

    private void setControl() {
        radiogroup = findViewById(R.id.radiogroup);
        edt_sale = findViewById(R.id.edt_price_sale);
        edt_price = findViewById(R.id.edt_price_room);
        edt_description = findViewById(R.id.edt_description);
        sp_status = findViewById(R.id.sp_status);
        rcv_tien_nghi = findViewById(R.id.rcv_tien_nghi);
        rcv_dich_vu_phong = findViewById(R.id.rcv_dich_vu_phong);
        btn_back = findViewById(R.id.btn_back);
        btn_save = findViewById(R.id.btn_save_phong);
        edt_name = findViewById(R.id.edt_name_room);
        ibChosseImg = findViewById(R.id.ibChosseImg);
        rcv_anhphong = findViewById(R.id.rcv_anh_phong);
        progressBar_luuphong = findViewById(R.id.progressBar_luuphong);
        viewBlocking = findViewById(R.id.viewBlocking);
    }

    private void setEvent() {
        imageAdapter.setOnItemClickListener(new ImageAdapter.OnItemClickListener() {
            @Override
            public void onDeleteClick(int position) {
                removeImageAtPosition(position);
            }
        });
        ibChosseImg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                currentSelectedImageView = ibChosseImg; // Lưu lại ImageView hiện tại để sử dụng sau
                showImagePickDialog(); // Hiển thị dialog để người dùng chọn ảnh
            }
        });
        btn_back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish(); // Finish the current activity
            }

            ;
        });

        btn_save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (thong_tin_phong == null) {
                    save_data();
                } else {
                    update_data(thong_tin_phong.getId_phong());
                }

            }
        });
        sp_status.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
                trang_thai_phong selectedTrangThai = list_status.get(position);
                if (selectedTrangThai != null) {
                    String selectedId = selectedTrangThai.getId_trang_thai_phong();
                    String selectedTenTrangThai = selectedTrangThai.getTen_trang_thai();
                }

            }

            @Override
            public void onNothingSelected(AdapterView<?> parentView) {
                Toast.makeText(Activity_Thong_Tin_Phong.this, "Vui lòng chọn trạng thái phòng", Toast.LENGTH_SHORT).show();
                sp_status.findFocus();
            }
        });
        sp_status.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
        rcv_tien_nghi.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
        rcv_tien_nghi.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
        rcv_tien_nghi.setAdapter(adapterTienNghi);

        rcv_dich_vu_phong.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
        rcv_dich_vu_phong.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
        rcv_dich_vu_phong.setAdapter(adapterDichVuPhong);
    }

    //hàm fill dữ liệu của phòng
    public void fill_data(phong data_phong) {
        edt_name.setText(data_phong.getTen_phong());
        edt_description.setText(data_phong.getMo_ta_chung());
        DecimalFormat formatter = new DecimalFormat("#");
        edt_price.setText(formatter.format(data_phong.getGia()));
        edt_sale.setText(formatter.format(data_phong.getSale()));

        loadchitiettiennghi(data_phong.getId_phong());
        adapterTienNghi.GoiDuLieu(data_phong.getId_phong());
        adapterDichVuPhong.GoiDuLieu(data_phong.getId_phong());
        if (data_phong.getAnh_phong() != null) {
            loadImagesFromFirebase(data_phong);
        }

        switch (data_phong.getLoai_phong()) {
            case "1 Người":
                radiogroup.check(R.id.rdo_1_nguoi);
                break;
            case "2 Người":
                radiogroup.check(R.id.rdo_2_nguoi);
                break;
            case "3 Người":
                radiogroup.check(R.id.rdo_3_nguoi);
                break;
            case "4 Người":
                radiogroup.check(R.id.rdo_4_nguoi);
                break;
            case "5 Người":
                radiogroup.check(R.id.rdo_5_nguoi);
                break;
        }
    }

    //truyền ảnh từ url vào adapter để hiện ảnh lên recyclerview
    private void loadImagesFromFirebase(phong thongtin) {
        picture_list.clear();
        for (String url : thongtin.getAnh_phong()) {
            Uri imageUri = Uri.parse(url);
            picture_list.add(imageUri);
            Log.e("urianhr", imageUri.toString());
        }
        imageAdapter.notifyDataSetChanged();
    }

    //hàm cập nhật phòng
    void update_data(String id_phong) {

        if (validateRoomData()) {
            viewBlocking.setVisibility(View.VISIBLE);
            progressBar_luuphong.setVisibility(View.VISIBLE); // Hiển thị ProgressBar
            uploadImages(picture_list, new OnAllImagesUploadedListener() {
                @Override
                public void onAllImagesUploaded(List<String> imageUrls) {
                    for (String str:list_ten_anh) {
                        Log.e("anhdhdhdhhd",str.toString());
                    }
                    if(list_ten_anh!=null){
                        removeAndReplacePictures(list_ten_anh,id_phong);
                    }
                    updateRoom(thong_tin_phong.getId_phong());
                    progressBar_luuphong.setVisibility(View.GONE);
                    viewBlocking.setVisibility(View.GONE);
                    Toast.makeText(Activity_Thong_Tin_Phong.this, "Thêm phòng thành công", Toast.LENGTH_SHORT).show();
                    finish();
                }
            });
        }
    }

    //hàm thêm phòng mới
    void save_data() {
        if (validateRoomData()) {
            viewBlocking.setVisibility(View.VISIBLE);
            progressBar_luuphong.setVisibility(View.VISIBLE); // Hiển thị ProgressBar
            uploadImages(picture_list, new OnAllImagesUploadedListener() {
                @Override
                public void onAllImagesUploaded(List<String> imageUrls) {
                    Log.e("hhhhhhh", "đã thêm ảnh");
                    phong room = new_room();
                    onClickAdd_room(new_room());
                    progressBar_luuphong.setVisibility(View.GONE);
                    viewBlocking.setVisibility(View.GONE);
                    Toast.makeText(Activity_Thong_Tin_Phong.this, "Thêm phòng thành công", Toast.LENGTH_SHORT).show();
                    finish();
                }
            });
        }
    }

    //hàm cập nhật chi tiết tiện nghi
    private void onClickUpdateComfort(ArrayList<chi_tiet_tien_nghi> comfortList, String idPhong) {
        DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
        Map<String, Object> childUpdates = new HashMap<>();

        // Tạo các cập nhật cho mỗi chi tiết tiện nghi
        for (chi_tiet_tien_nghi comfort : comfortList) {
            String comfortID = comfort.getId_tien_nghi();
            if (comfortID != null) {
                // Đường dẫn sẽ là /chi_tiet_tien_nghi/idPhong/comfortID
                Map<String, Object> comfortValues = comfort.toMap();
                childUpdates.put("/chi_tiet_tien_nghi/" + idPhong + "/" + comfortID, comfortValues);
            }
        }

        // Thực hiện cập nhật thông tin
        databaseReference.updateChildren(childUpdates).addOnCompleteListener(task -> {
            if (task.isSuccessful()) {
                // Cập nhật thành công
                Log.e("sửa tiện nghi", "thành công");
                //Toast.makeText(Activity_Thong_Tin_Phong.this, "Comfort updated successfully", Toast.LENGTH_SHORT).show();
            } else {
                // Cập nhật thất bại
                Log.e("sửa tiện nghi", "thất bại");
                //Toast.makeText(Activity_Thong_Tin_Phong.this, "Failed to update comfort", Toast.LENGTH_SHORT).show();
            }
        });
    }
    private void removeAndReplacePictures(ArrayList<String> newPictureList, String idPhong) {
        DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();

        // Sử dụng setValue(null) để xóa toàn bộ danh sách ảnh trong 'anh_phong'
        databaseReference.child("phong").child(idPhong).child("anh_phong").setValue(null, new DatabaseReference.CompletionListener() {
            @Override
            public void onComplete(@Nullable DatabaseError error, @NonNull DatabaseReference ref) {
                if (error == null) {
                    // Xóa thành công, sau đó thêm ảnh mới
                    Map<String, Object> newPictures = new HashMap<>();

                    for (int i = 0; i < newPictureList.size(); i++) {
                        String picUrl = newPictureList.get(i);
                        newPictures.put(String.valueOf(i), picUrl);
                    }

                    // Tạo một HashMap chứa dữ liệu mới cho phòng cụ thể
                    Map<String, Object> roomUpdates = new HashMap<>();
                    roomUpdates.put("/phong/" + idPhong + "/anh_phong", newPictures);

                    // Thực hiện cập nhật dữ liệu vào Firebase
                    databaseReference.updateChildren(roomUpdates, new DatabaseReference.CompletionListener() {
                        @Override
                        public void onComplete(@Nullable DatabaseError error, @NonNull DatabaseReference ref) {
                            if (error == null) {
                                // Cập nhật thành công
                                // Đây là nơi bạn có thể thêm mã xử lý sau khi cập nhật thành công
                            } else {
                                // Có lỗi xảy ra trong quá trình cập nhật
                                // Đây là nơi bạn có thể xử lý lỗi (ví dụ: hiển thị thông báo cho người dùng)
                            }
                        }
                    });
                } else {
                    // Có lỗi xảy ra trong quá trình xóa
                    // Đây là nơi bạn có thể xử lý lỗi (ví dụ: hiển thị thông báo cho người dùng)
                }
            }
        });
    }


    //hàm cập nhật dịch vụ phòng
    private void onClickUpdatefacilities(ArrayList<chi_tiet_dich_vu_phong> facilityList, String idPhong) {
        DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
        Map<String, Object> childUpdates = new HashMap<>();

        // Tạo các cập nhật cho mỗi chi tiết tiện nghi
        for (chi_tiet_dich_vu_phong facility : facilityList) {
            String facilityID = facility.getId_dich_vu_phong();
            if (facilityID != null) {
                // Đường dẫn sẽ là /chi_tiet_tien_nghi/idPhong/comfortID
                Map<String, Object> facilityValues = facility.toMap();
                childUpdates.put("/chi_tiet_dich_vu_phong/" + idPhong + "/" + facilityID, facilityValues);
            }
        }

        // Thực hiện cập nhật thông tin
        databaseReference.updateChildren(childUpdates).addOnCompleteListener(task -> {
            if (task.isSuccessful()) {
                // Cập nhật thành công
                Log.e("sửa dịch vụ phòng", "thành công");
                // Toast.makeText(Activity_Thong_Tin_Phong.this, "Comfort updated successfully", Toast.LENGTH_SHORT).show();
            } else {
                // Cập nhật thất bại
                Log.e("sửa dịch vụ phòng", "thất bại");
                //Toast.makeText(Activity_Thong_Tin_Phong.this, "Failed to update comfort", Toast.LENGTH_SHORT).show();
            }
        });
    }
    int uploadedImageCount = 0;
    //hàm up ảnh lên firebase
    public void uploadImages(ArrayList<Uri> imageUris, final OnAllImagesUploadedListener listener) {
        StorageReference storageReference = FirebaseStorage.getInstance().getReferenceFromUrl("gs://tdc-hotel-beb50.appspot.com");
        List<Task<Uri>> tasks = new ArrayList<>();
       // Biến đếm số lượng hình ảnh đã tải lên thành công
        uploadedImageCount = 0;
        for (Uri imageUri : imageUris) {
            final String fileName = "images/" + System.currentTimeMillis() + ".jpg";
            StorageReference fileReference = storageReference.child(fileName);
            UploadTask uploadTask = fileReference.putFile(imageUri);

            // Chaining task to get download URL after upload is successful
            Task<Uri> urlTask = uploadTask.continueWithTask(task -> {
                if (!task.isSuccessful()) {
                    throw task.getException();
                }
                // Continue with the task to get the download URL
                return fileReference.getDownloadUrl();
            }).addOnCompleteListener(task -> {
                if (task.isSuccessful()) {
                    Uri downloadUri = task.getResult();
                    list_ten_anh.add(downloadUri.toString());
                    uploadedImageCount++; // Tăng biến đếm lên
                    if (uploadedImageCount == imageUris.size()) {
                        // Nếu đã tải lên tất cả các hình ảnh, gọi callback
                        if (listener != null) {
                            listener.onAllImagesUploaded(list_ten_anh);
                        }
                    }
                } else {
                    // Xử lý lỗi nếu có
                }
            });
            tasks.add(urlTask);
        }

        Tasks.whenAllSuccess(tasks).addOnSuccessListener(new OnSuccessListener<List<Object>>() {
            @Override
            public void onSuccess(List<Object> list) {
                // Tất cả hình ảnh đã được tải lên thành công
                if (uploadedImageCount < imageUris.size()) {
                    // Nếu có lỗi trong quá trình tải lên, xử lý lỗi ở đây
                }
            }
        });
    }

    public interface OnAllImagesUploadedListener {
        void onAllImagesUploaded(List<String> imageUrls);
    }

    public interface OnAllImagesDeletedListener {
        void onAllImagesDeleted(List<String> successfulDeletes, List<String> failedDeletes);
    }

    //dialog
    private void showImagePickDialog() {
        String[] options = {"Camera", "Thư viện ảnh"};
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Chọn ảnh từ");
        builder.setItems(options, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                if (which == 0) {
                    // Camera
                    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
                    }
                } else if (which == 1) {
                    // Thư viện ảnh
                    Intent pickPhotoIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                    pickPhotoIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); // Cho phép chọn nhiều ảnh
                    startActivityForResult(pickPhotoIntent, REQUEST_IMAGE_PICK);
                }
            }
        });
        builder.show();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (resultCode == RESULT_OK) {
            if (requestCode == REQUEST_IMAGE_PICK) {
                // Xử lý chọn ảnh từ thư viện
                handleImageSelection(data);
            } else if (requestCode == REQUEST_IMAGE_CAPTURE) {
                // Xử lý chụp ảnh từ camera
                handleCameraImage(data);
            }
        }
    }

    private void handleImageSelection(Intent data) {
        if (data.getClipData() != null) {
            int count = data.getClipData().getItemCount(); // Lấy số lượng ảnh đã chọn
            for (int i = 0; i < count; i++) {
                Uri imageUri = data.getClipData().getItemAt(i).getUri();
                picture_list.add(imageUri); // Thêm Uri vào mảng
            }
        } else if (data.getData() != null) {
            Uri imageUri = data.getData();
            picture_list.add(imageUri); // Thêm Uri vào mảng
        }
        updateRecyclerView();

    }

    private void handleCameraImage(Intent data) {
        Bundle extras = data.getExtras();
        if (extras != null) {
            Bitmap imageBitmap = (Bitmap) extras.get("data");
            // Lưu bitmap vào một file tạm thời và lấy URI của nó
            Uri imageUri = saveImageToTempFile(imageBitmap);
            if (imageUri != null) {
                picture_list.add(imageUri); // Thêm Uri vào mảng
                updateRecyclerView();
            }
        }
    }

    private Uri saveImageToTempFile(Bitmap bitmap) {
        // Tạo một file tạm thời để lưu ảnh
        File tempDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        File tempFile = null;
        try {
            tempFile = File.createTempFile("captured_", ".jpg", tempDir);
            FileOutputStream fos = new FileOutputStream(tempFile);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
            fos.close();
            return Uri.fromFile(tempFile);
        } catch (IOException e) {
            e.printStackTrace();
            // Xử lý lỗi
        }
        return null;
    }

    private void removeImageAtPosition(int position) {
        if (position >= 0 && position < picture_list.size()) {
            // Remove the image URI from the list at the specified position
            picture_list.remove(position);
            // Notify the adapter that an item has been removed
            imageAdapter.notifyItemRemoved(position);
            // Notify any registered observers that the itemCount items starting at position positionStart have changed.
            imageAdapter.notifyItemRangeChanged(position, picture_list.size());
        } else {
            Log.e("xóa phòng " + position, "thành công");
        }
    }

    private void updateRecyclerView() {
        if (imageAdapter == null) {
            imageAdapter = new ImageAdapter(this, picture_list);
            rcv_anhphong.setAdapter(imageAdapter);
            rcv_anhphong.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
        } else {
            imageAdapter.notifyDataSetChanged(); // Thông báo rằng dữ liệu đã thay đổi
        }
    }

    public void SuaChiTiet(String id_phong) {
        list_chi_tietDVP.clear();
        //sách chi tiết dịch vụ phòng từ adapter
        list_chi_tietDVP = adapterDichVuPhong.getChiTietDichVu();
        // Thêm danh sách chi tiết dịch vụ phòng vào Firebase
        onClickUpdatefacilities(list_chi_tietDVP, id_phong);


        list_chi_tietTN.clear();
        list_chi_tietTN = adapterTienNghi.getChi_tiet_tien_nghis();
        for (int i = 0; i < list_chi_tietTN.size(); i++) {
            Log.e("chi tiet tien nghi lấy về", list_chi_tietTN.get(i).getId_tien_nghi() + " " + list_chi_tietTN.get(i).getSo_luong());
        }
        onClickUpdateComfort(list_chi_tietTN, id_phong);
    }

    private void updateRoom(String idPhong) {
        viewBlocking.setVisibility(View.VISIBLE);
        progressBar_luuphong.setVisibility(View.VISIBLE); // Hiển thị ProgressBar
        // Lấy thông tin từ các EditText, Spinner, và RadioGroup
        String name = edt_name.getText().toString().trim();
        String description = edt_description.getText().toString().trim();
        String priceText = edt_price.getText().toString().trim();
        String saleText = edt_sale.getText().toString().trim();
        String type = typeRoom(); //lấy thông tin từ RadioGroup
        int price = priceText.isEmpty() ? 0 : Integer.parseInt(priceText);
        int sale = saleText.isEmpty() ? 0 : Integer.parseInt(saleText);

        // Lấy thông tin trạng thái phòng từ Spinner
        int selectedPosition = sp_status.getSelectedItemPosition();
        trang_thai_phong selectedTrangThai = list_status.get(selectedPosition);
        String statusID = selectedTrangThai.getId_trang_thai_phong();

        // Tạo một đối tượng phong mới với thông tin đã cập nhật
        phong updatedRoom = new phong(idPhong, name, description, list_ten_anh, type, statusID, 0, price, sale, 0);

        // Cập nhật thông tin phòng trong Firebase Database
        DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("phong");
        databaseReference.child(idPhong).setValue(updatedRoom, new DatabaseReference.CompletionListener() {
            @Override
            public void onComplete(@Nullable DatabaseError error, @NonNull DatabaseReference ref) {
                if (error == null) {
                    Log.e("Cập nhật thông tin phòng", "thành công");
                    //Toast.makeText(Activity_Thong_Tin_Phong.this, "Room updated successfully", Toast.LENGTH_SHORT).show();
                } else {
                    Log.e("Cập nhật thông tin phòng", "thất bại");
                    //Toast.makeText(Activity_Thong_Tin_Phong.this, "Failed to update room: " + error.getMessage(), Toast.LENGTH_SHORT).show();
                }
            }
        });
        SuaChiTiet(idPhong);
        viewBlocking.setVisibility(View.GONE);
        progressBar_luuphong.setVisibility(View.GONE);
    }

    chi_tiet_dich_vu_phong facilities(String id_facility, int quantity, String id_phong) {
        chi_tiet_dich_vu_phong new_facilities = new chi_tiet_dich_vu_phong();
        new_facilities.setId_dich_vu_phong(id_facility);
        new_facilities.setSo_luong(quantity);
        new_facilities.setId_phong(id_phong);
        return new_facilities;
    }


    chi_tiet_tien_nghi comfort(String id_comfort, int quantity, String id_phong) {

        chi_tiet_tien_nghi new_comfort = new chi_tiet_tien_nghi();
        new_comfort.setId_tien_nghi(id_comfort);
        new_comfort.setSo_luong(quantity);
        new_comfort.setId_phong(id_phong);
        return new_comfort;
    }

    private void onClickAdd_comfort(ArrayList<chi_tiet_tien_nghi> comfortList, String idPhong) {
        DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
        Map<String, Object> chilUpdates = new HashMap<>();
//Tạo các cập nhật cho mỗi chi tiêt tiện nghi
        for (chi_tiet_tien_nghi comfort : comfortList) {
            String comfortID = comfort.getId_tien_nghi();
            if (comfortID != null) {
                // Đường dẫn sẽ là /chi_tiet_tien_nghi/idPhong/key
                Map<String, Object> comfortValues = comfort.toMap();
                chilUpdates.put("/chi_tiet_tien_nghi/" + idPhong + "/" + comfortID, comfortValues);
            }
        }
        //Thưc hiện cập nhật thông báo
        databaseReference.updateChildren(chilUpdates).addOnCompleteListener(task -> {
            if (task.isSuccessful()) {
                // Cập nhật thành công
                Log.e("thêm tiện nghi", "thành công");
                //(Activity_Thong_Tin_Phong.this, "Comfort added successfully", Toast.LENGTH_SHORT).show();
            } else {
                // Cập nhật thất bại
                Log.e("thêm tiện nghi", "thất bại");
                //Toast.makeText(Activity_Thong_Tin_Phong.this, "Failed to add comfort", Toast.LENGTH_SHORT).show();
            }
        });
    }

    private void onClickAddFacilities(ArrayList<chi_tiet_dich_vu_phong> facilitiesList, String idPhong) {
        DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
        Map<String, Object> childUpdates = new HashMap<>();

        // Tạo các cập nhật cho mỗi chi tiết dịch vụ phòng
        for (chi_tiet_dich_vu_phong facility : facilitiesList) {
            String facilityID = facility.getId_dich_vu_phong();
            if (facilityID != null) {
                // Đường dẫn sẽ là /chi_tiet_dich_vu_phong/idPhong/key
                Map<String, Object> facilityValues = facility.toMap();
                childUpdates.put("/chi_tiet_dich_vu_phong/" + idPhong + "/" + facilityID, facilityValues);
            }
        }

        // Thực hiện cập nhật thông báo
        databaseReference.updateChildren(childUpdates).addOnCompleteListener(task -> {
            if (task.isSuccessful()) {
                // Cập nhật thành công
                Log.e("thêm dịch vụ phòng", "thành công");
                //Toast.makeText(Activity_Thong_Tin_Phong.this, "Facilities added successfully", Toast.LENGTH_SHORT).show();
            } else {
                // Cập nhật thất bại
                Log.e("thêm tiện nghi", "thất bại");
                //Toast.makeText(Activity_Thong_Tin_Phong.this, "Failed to add facilities", Toast.LENGTH_SHORT).show();
            }
        });
    }

    private void onClickAdd_room(phong phong) {
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference databaseReference = database.getReference("phong");
        DatabaseReference new_room = databaseReference.push(); // Tạo một khóa con mới

        new_room.setValue(phong, new DatabaseReference.CompletionListener() {
            @Override
            public void onComplete(@Nullable DatabaseError error, @NonNull DatabaseReference ref) {
                if (error == null) {
                    String generatedId = new_room.getKey(); // Lấy khóa con duy nhất đã tạo
                    IDphong = generatedId;
                    ThemChiTiet(IDphong);
                    if (generatedId != null) {
                        phong.setId_phong(generatedId); // Gán khóa con duy nhất làm id_dich_vu cho dichvu
                        new_room.setValue(phong); // Cập nhật lại dữ liệu với id_dich_vu mới
                        Toast.makeText(Activity_Thong_Tin_Phong.this, "Add success", Toast.LENGTH_SHORT).show();
                    } else {
                        Log.e("Tạo phòng", "thất bại");
                        //Toast.makeText(Activity_Thong_Tin_Phong.this, "Add failed", Toast.LENGTH_SHORT).show();
                    }
                } else {
                    Log.e("Lỗi tạo phòng", "Error: " + error.getMessage());
                    //Toast.makeText(Activity_Thong_Tin_Phong.this, "Error: " + error.getMessage(), Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    public void ThemChiTiet(String id_phong) {
        // Lấy danh sách chi tiết dịch vụ phòng từ adapter
        list_chi_tietDVP = adapterDichVuPhong.getChiTietDichVu();
        // Thêm danh sách chi tiết dịch vụ phòng vào Firebase
        onClickAddFacilities(list_chi_tietDVP, id_phong);

        list_chi_tietTN = adapterTienNghi.getChi_tiet_tien_nghis();
        onClickAdd_comfort(list_chi_tietTN, id_phong);
    }

    // Hàm xóa nhiều ảnh từ Firebase Storage
    public void deleteImages(List<String> imageUrls) {
        for (String imageUrl : imageUrls) {
            // Tạo một tham chiếu đến ảnh cần xóa
            StorageReference photoRef = FirebaseStorage.getInstance().getReferenceFromUrl(imageUrl);

            // Xóa ảnh
            photoRef.delete().addOnSuccessListener(aVoid -> {
                // Xóa thành công
            }).addOnFailureListener(exception -> {
                // Xóa thất bại
            });
        }
    }


    String typeRoom() {
        String type_room = "";
        if (radiogroup.getCheckedRadioButtonId() != -1) {
            RadioButton selectedRadioButton = findViewById(radiogroup.getCheckedRadioButtonId());
            type_room = selectedRadioButton.getText().toString(); // Lấy dữ liệu của radio button đã chọn
        } else {
            radiogroup.findFocus();
        }
        return type_room;
    }

    phong new_room() {
        String name = edt_name.getText().toString();
        String description = edt_description.getText().toString();
        int price = Integer.parseInt(edt_price.getText().toString());
        int sale = Integer.parseInt(edt_sale.getText().toString());
        String type = typeRoom();
        //trạng thái
        int selectedPosition = sp_status.getSelectedItemPosition();
        trang_thai_phong selectedTrangThai = list_status.get(selectedPosition);
        String statusID = selectedTrangThai.getId_trang_thai_phong();
        int luot_thue = 0;
        int rating = 0;

        phong room = new phong(null, name, description, list_ten_anh, type, statusID, luot_thue, price, sale, rating);
        return room;
    }

    private void loadchitiettiennghi(String id_phong) {
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference ref = database.getReference("chi_tiet_tien_nghi");

// Tạo một query để lọc các phần tử có id_phong cần tìm
        Query query = ref.orderByChild("id_phong").equalTo(id_phong);

        query.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                ArrayList<Object> danhSachTienNghi = new ArrayList<>();
                for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                    // Giả sử Object là class của bạn có thuộc tính id_phong
                    chi_tiet_tien_nghi tienNghi = postSnapshot.getValue(chi_tiet_tien_nghi.class);
                    list_tiennghi_dowload.add(tienNghi);
                }
                // adapterTienNghi.filldata(list_tiennghi_dowload, rcv_tien_nghi);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                // Lỗi khi không thể thực hiện truy vấn hoặc truy vấn bị hủy
                System.out.println("loadPost:onCancelled: " + databaseError.toException());
            }
        });

    }

    private void loadTrangThaiPhong() {
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("trang_thai_phong");
        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                list_status.clear();

                for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
                    trang_thai_phong trangThai = dataSnapshot.getValue(trang_thai_phong.class);
                    if (trangThai != null) {
                        list_status.add(trangThai);
                    }
                }
                // Cập nhật Spinner sp_status khi có dữ liệu mới
                updateSpinnerStatus();
                if (thong_tin_phong != null) {
                    for (int i = 0; i < list_status.size(); i++) {
                        trang_thai_phong status = list_status.get(i);
                        Log.e("trang thai phong", status.getId_trang_thai_phong().toString());
                        if (status.getId_trang_thai_phong().equals(thong_tin_phong.getId_trang_thai_phong())) {
                            sp_status.setSelection(i);
                            break;
                        }
                    }
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {
                // Xử lý lỗi nếu có
            }
        });
    }

    private void updateSpinnerStatus() {
        List<String> spinnerData = new ArrayList<>();
        for (trang_thai_phong trangThai : list_status) {
            spinnerData.add(trangThai.getTen_trang_thai());
        }

        ArrayAdapter<String> adapter_spinner = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, spinnerData);
        adapter_spinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        sp_status.setAdapter(adapter_spinner);
    }

    private boolean validateRoomData() {
        String name = edt_name.getText().toString().trim();
        String priceText = edt_price.getText().toString().trim();
        String saleText = edt_sale.getText().toString().trim();
        int price = 0;
        int sale = 0;
        String type = typeRoom();

        if (name.isEmpty()) {
            Toast.makeText(this, "Vui lòng nhập tên phòng", Toast.LENGTH_SHORT).show();
            return false;
        }

        if (priceText.isEmpty()) {
            Toast.makeText(this, "Vui lòng nhập giá phòng", Toast.LENGTH_SHORT).show();
            return false;
        } else {
            price = Integer.parseInt(priceText);
        }

        if (!saleText.isEmpty()) {
            sale = Integer.parseInt(saleText);
            if (sale >= price) {
                Toast.makeText(this, "Giá sale phải nhỏ hơn giá phòng", Toast.LENGTH_SHORT).show();
                edt_sale.setText(""); // Xóa giá sale nếu không hợp lệ
                return false;
            }
        }

        if (type.isEmpty()) {
            Toast.makeText(this, "Vui lòng chọn loại phòng", Toast.LENGTH_SHORT).show();
            return false;
        }
         if (list_ten_anh.isEmpty()) {
            Toast.makeText(this, "Không có ảnh dcmm", Toast.LENGTH_SHORT).show();
            return false;
        }

        // Nếu tất cả điều kiện đều hợp lệ, trả về true
        return true;
    }

}
Editor is loading...