package com.example.wadi;

import static android.content.Intent.getIntent;
import static androidx.core.app.ActivityCompat.recreate;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.bumptech.glide.Glide;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class HomeServices extends Fragment {

    private static final int REQUEST_CALL_PERMISSION = 1;
    private TextView services,phone,user_send,desc,create_time,rate,stutes,raok,racn,userdes;

    private ImageView elecImage,okImage,noImage,call,ons,tos,ths,frs,ffrs;

    private SQLiteHandler db;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.home_services, container, false);

        fetchData();

        elecImage = view.findViewById(R.id.detailImage);
        phone =view.findViewById(R.id.userphone);
        desc =view.findViewById(R.id.userdes);
        create_time =view.findViewById(R.id.create_time);
        user_send = view.findViewById(R.id.user_sent);
        rate=view.findViewById(R.id.rate);
        stutes=view.findViewById(R.id.stutes);
        call= view.findViewById(R.id.call);
        ons = view.findViewById(R.id.ons);
        tos =view.findViewById(R.id.tos);
        ths =view.findViewById(R.id.ths);
        frs =view.findViewById(R.id.frs);
        ffrs =view.findViewById(R.id.ffrs);
        userdes =view.findViewById(R.id.userdes);
        stutes = view.findViewById(R.id.stutes);
        raok = view.findViewById(R.id.userloc);

        SQLiteHandler db = new SQLiteHandler(requireContext());

        call.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                makePhoneCall();
            }
        });


        ons.setOnClickListener(v -> {
            String Services = requireActivity().getIntent().getStringExtra("Services");
            String status = "1";
            String type = "rt";
            HashMap<String, String> user = db.getUserDetails();
            String user_do = user.get("uid");
            updateStatus(Services,status,type,user_do);

            Fragment fragment = getParentFragmentManager().findFragmentByTag("MY_FRAGMENT_TAG");
            if (fragment != null) {
                getParentFragmentManager().beginTransaction().detach(fragment).attach(fragment).commit();
            }

        });

        tos.setOnClickListener(v -> {
            String Services = requireActivity().getIntent().getStringExtra("Services");
            String status = "2";
            String type = "rt";
            HashMap<String, String> user = db.getUserDetails();
            String user_do = user.get("uid");
            updateStatus(Services,status,type,user_do);

            Fragment fragment = getParentFragmentManager().findFragmentByTag("MY_FRAGMENT_TAG");
            if (fragment != null) {
                getParentFragmentManager().beginTransaction().detach(fragment).attach(fragment).commit();
            }

        });

        ths.setOnClickListener(v -> {
            String Services = requireActivity().getIntent().getStringExtra("Services");
            String status = "3";
            String type = "rt";
            HashMap<String, String> user = db.getUserDetails();
            String user_do = user.get("uid");
            updateStatus(Services,status,type,user_do);

            Fragment fragment = getParentFragmentManager().findFragmentByTag("MY_FRAGMENT_TAG");
            if (fragment != null) {
                getParentFragmentManager().beginTransaction().detach(fragment).attach(fragment).commit();
            }

        });

        frs.setOnClickListener(v -> {
            String Services = requireActivity().getIntent().getStringExtra("Services");
            String status = "4";
            String type = "rt";
            HashMap<String, String> user = db.getUserDetails();
            String user_do = user.get("uid");
            updateStatus(Services,status,type,user_do);

            Fragment fragment = getParentFragmentManager().findFragmentByTag("MY_FRAGMENT_TAG");
            if (fragment != null) {
                getParentFragmentManager().beginTransaction().detach(fragment).attach(fragment).commit();
            }

        });

        ffrs.setOnClickListener(v -> {
            String Services = requireActivity().getIntent().getStringExtra("Services");
            String status = "5";
            String type = "rt";
            HashMap<String, String> user = db.getUserDetails();
            String user_do = user.get("uid");
            updateStatus(Services,status,type,user_do);

            Fragment fragment = getParentFragmentManager().findFragmentByTag("MY_FRAGMENT_TAG");
            if (fragment != null) {
                getParentFragmentManager().beginTransaction().detach(fragment).attach(fragment).commit();
            }

        });




        return view;
    }




    private void makePhoneCall() { // Replace with your number
        Intent intent = new Intent(Intent.ACTION_CALL);
        intent.setData(Uri.parse("tel:" + phone.getText().toString()));

        if (ContextCompat.checkSelfPermission(requireContext(), android.Manifest.permission.CALL_PHONE)
                != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[]{Manifest.permission.CALL_PHONE}, REQUEST_CALL_PERMISSION);
        } else {
            startActivity(intent);
        }
    }


    private void fetchData() {

        String services = requireActivity().getIntent().getStringExtra("Services");

        String url = AppConfig.URL_Services_Detils+services; // Replace with your API URL

        RequestQueue queue = Volley.newRequestQueue(getContext());
        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
                response -> {
                    try {
                        String service_num = response.getString("service_number");
                        String service_typ = response.getString("service_type");
                        String user_sen = response.getString("name");
                        String service_rat = response.getString("service_rate");
                        String service_stut = response.getString("service_stuts");
                        String create_tim = response.getString("create_time");
                        String location = response.getString("location");
                        String ftime = response.getString("ftime");
                        String ttime = response.getString("ttime");
                        String imageUrl = response.getString("url_image");


                        create_time.setText(" من الساعه : " + ftime +  " الي الساعه : " + ttime);
                        user_send.setText(user_sen);
                        desc.setText(service_typ);
                        phone.setText(service_num);
                        rate.setText(service_rat);
                        userdes.setText(location);
                        stutes.setText(service_stut);
                        raok.setText(service_typ);


                        if ("1".equals(service_stut)) {
                            stutes.setText("مفتوح");
                        }

                        if ("0".equals(service_stut)) {
                            stutes.setText("مغلق");
                        }

                        Glide.with(this).load(imageUrl).into(elecImage);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                },
                error -> Toast.makeText(requireContext(), "هنالك خطأ", Toast.LENGTH_SHORT).show()
        );
        queue.add(request);
    }


    public void updateStatus(String id, String status, String type,String user_do) {
        String url = AppConfig.URL_Services_Detils_rat;

        RequestQueue queue = Volley.newRequestQueue(getContext());
        StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
                response -> {
                    // handle success
                    Log.d("Response", response);
                },
                error -> {
                    // handle error
                    Log.e("Error", error.toString());
                }) {
            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<>();
                params.put("id", id);
                params.put("status", status);
                params.put("type", type);
                params.put("user_do", user_do);
                return params;
            }
        };

        queue.add(stringRequest);
    }

}