package com.vpnpanel;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

public class ServerAdapter extends RecyclerView.Adapter<ServerAdapter.ServerViewHolder> {

    private List<Server> servers;
    private Server selectedServer;
    private OnServerSelectedListener listener;

    public interface OnServerSelectedListener {
        void onServerSelected(Server server);
    }

    public ServerAdapter(List<Server> servers, OnServerSelectedListener listener) {
        this.servers = servers;
        this.listener = listener;
    }

    @NonNull
    @Override
    public ServerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.item_server, parent, false);
        return new ServerViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ServerViewHolder holder, int position) {
        Server server = servers.get(position);
        holder.bind(server);
    }

    @Override
    public int getItemCount() {
        return servers.size();
    }

    public void updateServers(List<Server> newServers) {
        this.servers = newServers;
        notifyDataSetChanged();
    }

    public void setSelectedServer(Server server) {
        this.selectedServer = server;
        notifyDataSetChanged();
    }

    class ServerViewHolder extends RecyclerView.ViewHolder {
        
        TextView tvFlag;
        TextView tvServerName;
        TextView tvLoad;
        TextView tvPing;
        ImageView ivSelected;

        public ServerViewHolder(@NonNull View itemView) {
            super(itemView);
            
            tvFlag = itemView.findViewById(R.id.tvFlag);
            tvServerName = itemView.findViewById(R.id.tvServerName);
            tvLoad = itemView.findViewById(R.id.tvLoad);
            tvPing = itemView.findViewById(R.id.tvPing);
            ivSelected = itemView.findViewById(R.id.ivSelected);

            itemView.setOnClickListener(v -> {
                int position = getAdapterPosition();
                if (position != RecyclerView.NO_POSITION && listener != null) {
                    Server server = servers.get(position);
                    selectedServer = server;
                    listener.onServerSelected(server);
                    notifyDataSetChanged();
                }
            });
        }

        public void bind(Server server) {
            tvFlag.setText(server.getFlag());
            tvServerName.setText(server.getName() + " - " + server.getLocation());
            
            // Load با رنگ مناسب
            float load = server.getLoad();
            tvLoad.setText(String.format("%.1f%%", load));
            
            if (load < 50) {
                tvLoad.setTextColor(itemView.getContext().getColor(R.color.green_500));
            } else if (load < 80) {
                tvLoad.setTextColor(itemView.getContext().getColor(R.color.orange_500));
            } else {
                tvLoad.setTextColor(itemView.getContext().getColor(R.color.red_500));
            }
            
            // Ping
            tvPing.setText(server.getPing() + "ms");
            
            // نمایش انتخاب
            if (selectedServer != null && selectedServer.getId() == server.getId()) {
                ivSelected.setVisibility(View.VISIBLE);
            } else {
                ivSelected.setVisibility(View.GONE);
            }
        }
    }
}
