diff --git a/app/src/main/java/com/example/vdcscore/ui/clubs/ClubDetailFragment.java b/app/src/main/java/com/example/vdcscore/ui/clubs/ClubDetailFragment.java index 6265b67..83ed0c5 100644 --- a/app/src/main/java/com/example/vdcscore/ui/clubs/ClubDetailFragment.java +++ b/app/src/main/java/com/example/vdcscore/ui/clubs/ClubDetailFragment.java @@ -19,6 +19,7 @@ import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.database.ValueEventListener; +import com.example.vdcscore.ui.home.Team; import com.bumptech.glide.Glide; public class ClubDetailFragment extends Fragment { @@ -50,73 +51,129 @@ public class ClubDetailFragment extends Fragment { super.onViewCreated(view, savedInstanceState); if (getArguments() != null) { - Club clubeRecebido = (Club) getArguments().getSerializable("clube_selecionado"); + Team statsTeam = (Team) getArguments().getSerializable("clube_selecionado_estatisticas"); - if (clubeRecebido != null) { - // Preencher views diretamente - binding.textDetailClubName.setText(clubeRecebido.getName()); - binding.textDetailFoundation.setText(String.valueOf(clubeRecebido.getFoundationYear())); - binding.textDetailPresident.setText(clubeRecebido.getPresident()); - binding.textDetailAddress.setText(clubeRecebido.getAddress()); - - if (getContext() != null) { - Glide.with(this) - .load(clubeRecebido.getImageUrl()) - .placeholder(R.mipmap.ic_launcher_round) - .error(R.mipmap.ic_launcher) - .into(binding.imageDetailLogo); + if (statsTeam != null) { + populateStats(statsTeam); + setupComparison(statsTeam); + } else { + Club clubeRecebido = (Club) getArguments().getSerializable("clube_selecionado"); + if (clubeRecebido != null) { + populateClubInfo(clubeRecebido); } - - // Configurar o botão para ver jogadores - binding.btnPlayers.setOnClickListener(v -> { - Bundle bundle = new Bundle(); - // Passar o 'clube_selecionado' também para a lista de jogadores se necessário, - // ou passar o ID como antes se o fragmento de jogadores esperar ID - bundle.putString("clubId", String.valueOf(clubeRecebido.getId())); - bundle.putString("escalao", escalao); - // Se o ClubPlayersFragment esperar "clube_selecionado" tambem, poderiamos - // passar: - // bundle.putSerializable("clube_selecionado", clubeRecebido); - - Navigation.findNavController(view).navigate(R.id.action_nav_club_detail_to_nav_club_players, - bundle); - }); } } } - private void loadClubDetails() { - mDatabase.addListenerForSingleValueEvent(new ValueEventListener() { - @Override - public void onDataChange(@NonNull DataSnapshot snapshot) { - Club club = snapshot.getValue(Club.class); - if (club != null) { - binding.textDetailClubName.setText(club.getName()); - binding.textDetailFoundation.setText(String.valueOf(club.getFoundationYear())); - binding.textDetailPresident.setText(club.getPresident()); - binding.textDetailAddress.setText(club.getAddress()); - // binding.textDetailStadium.setText(club.getStadium()); // Hidden for now + private void populateStats(Team team) { + binding.textDetailClubName.setText(team.getNome()); + binding.textDetailPoints.setText(String.valueOf(team.getPontos())); + binding.textDetailPlayed.setText(String.valueOf(team.getJogos())); + binding.textDetailWon.setText(team.getVitorias() + "V"); + binding.textDetailDrawn.setText(team.getEmpates() + "E"); + binding.textDetailLost.setText(team.getDerrotas() + "D"); + binding.textDetailGoals.setText(team.getGolos_marcados() + " - " + team.getGolos_sofridos()); + binding.textDetailGoalDiff.setText((team.getDiferenca_golos() > 0 ? "+" : "") + team.getDiferenca_golos()); + + // Posicao circle and text + binding.textDetailPosition.setText(team.getPosicao() > 0 ? team.getPosicao() + "º" : "---"); + binding.textDetailPositionCircle.setText(String.valueOf(team.getPosicao() > 0 ? team.getPosicao() : "-")); - // binding.imageDetailLogo.setImageResource(R.mipmap.ic_launcher_round); - if (getContext() != null) { - Glide.with(ClubDetailFragment.this) - .load(club.getImageUrl()) - .placeholder(R.mipmap.ic_launcher_round) - .error(R.mipmap.ic_launcher) - .into(binding.imageDetailLogo); - } - } - } + if (getContext() != null) { + Glide.with(this) + .load(team.getImagem()) + .placeholder(R.mipmap.ic_launcher_round) + .error(R.mipmap.ic_launcher) + .into(binding.imageDetailLogo); + } - @Override - public void onCancelled(@NonNull DatabaseError error) { - if (getContext() != null) { - Toast.makeText(getContext(), "Failed to load club details.", Toast.LENGTH_SHORT).show(); - } - } + // Button players + binding.btnPlayers.setOnClickListener(v -> { + Bundle bundle = new Bundle(); + bundle.putString("clubId", String.valueOf(team.getTeam_id())); + bundle.putString("escalao", escalao); + Navigation.findNavController(v).navigate(R.id.action_nav_club_detail_to_nav_club_players, bundle); }); } + private void populateClubInfo(Club club) { + binding.textDetailClubName.setText(club.getName()); + // If coming from Clubs list, we don't have stats easily unless we fetch them or hide stats container. + // For now, hide stats if no statsTeam + binding.labelStats.setVisibility(View.GONE); + binding.containerStats.setVisibility(View.GONE); + binding.btnCompare.setVisibility(View.GONE); + + if (getContext() != null) { + Glide.with(this) + .load(club.getImageUrl()) + .placeholder(R.mipmap.ic_launcher_round) + .error(R.mipmap.ic_launcher) + .into(binding.imageDetailLogo); + } + + binding.btnPlayers.setOnClickListener(v -> { + Bundle bundle = new Bundle(); + bundle.putString("clubId", String.valueOf(club.getId())); + bundle.putString("escalao", escalao); + Navigation.findNavController(v).navigate(R.id.action_nav_club_detail_to_nav_club_players, bundle); + }); + } + + private void setupComparison(Team team1) { + binding.btnCompare.setOnClickListener(v -> { + // Fetch all teams of same escalao if not fetched + FirebaseDatabase.getInstance().getReference("classificacoes").child(escalao) + .addListenerForSingleValueEvent(new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot snapshot) { + java.util.List otherTeams = new java.util.ArrayList<>(); + for (DataSnapshot postSnapshot : snapshot.getChildren()) { + Team t = postSnapshot.getValue(Team.class); + if (t != null && t.getTeam_id() != team1.getTeam_id()) { + otherTeams.add(t); + } + } + showComparisonDialog(team1, otherTeams); + } + + @Override + public void onCancelled(@NonNull DatabaseError error) {} + }); + }); + } + + private void showComparisonDialog(Team team1, java.util.List otherTeams) { + String[] teamNames = new String[otherTeams.size()]; + for (int i = 0; i < otherTeams.size(); i++) { + teamNames[i] = otherTeams.get(i).getNome(); + } + + new androidx.appcompat.app.AlertDialog.Builder(requireContext()) + .setTitle("Selecionar Equipa para Comparar") + .setItems(teamNames, (dialog, which) -> { + Team team2 = otherTeams.get(which); + displayComparison(team1, team2); + }) + .show(); + } + + private void displayComparison(Team t1, Team t2) { + binding.layoutComparison.setVisibility(View.VISIBLE); + binding.textCompareTeam1.setText(t1.getNome()); + binding.textCompareTeam2.setText(t2.getNome()); + + binding.textCompareP1.setText(String.valueOf(t1.getPontos())); + binding.textCompareP2.setText(String.valueOf(t2.getPontos())); + + binding.textCompareG1.setText(String.valueOf(t1.getGolos_marcados())); + binding.textCompareG2.setText(String.valueOf(t2.getGolos_marcados())); + + // Highlight advantage + binding.textCompareP1.setTextColor(t1.getPontos() >= t2.getPontos() ? android.graphics.Color.GREEN : android.graphics.Color.RED); + binding.textCompareP2.setTextColor(t2.getPontos() >= t1.getPontos() ? android.graphics.Color.GREEN : android.graphics.Color.RED); + } + @Override public void onDestroyView() { super.onDestroyView(); diff --git a/app/src/main/java/com/example/vdcscore/ui/home/HomeFragment.java b/app/src/main/java/com/example/vdcscore/ui/home/HomeFragment.java index 1393bf8..a37031e 100644 --- a/app/src/main/java/com/example/vdcscore/ui/home/HomeFragment.java +++ b/app/src/main/java/com/example/vdcscore/ui/home/HomeFragment.java @@ -39,6 +39,12 @@ public class HomeFragment extends Fragment { // Initialize RecyclerView adapter = new StandingsAdapter(); + adapter.setOnTeamClickListener(team -> { + Bundle bundle = new Bundle(); + bundle.putSerializable("clube_selecionado_estatisticas", team); + bundle.putString("escalao", currentEscalao); + androidx.navigation.Navigation.findNavController(root).navigate(R.id.action_nav_home_to_nav_club_detail, bundle); + }); binding.recyclerStandings.setLayoutManager(new LinearLayoutManager(getContext())); binding.recyclerStandings.setAdapter(adapter); @@ -92,13 +98,10 @@ public class HomeFragment extends Fragment { } } - // Sort properly - Collections.sort(teams, (t1, t2) -> { - if (t1.getPontos() != t2.getPontos()) { - return t2.getPontos() - t1.getPontos(); - } - return t2.getDiferenca_golos() - t1.getDiferenca_golos(); - }); + // Set positions after sorting + for (int i = 0; i < teams.size(); i++) { + teams.get(i).setPosicao(i + 1); + } if (adapter != null) { adapter.setTeams(teams); diff --git a/app/src/main/java/com/example/vdcscore/ui/home/StandingsAdapter.java b/app/src/main/java/com/example/vdcscore/ui/home/StandingsAdapter.java index e7c8bab..19286f8 100644 --- a/app/src/main/java/com/example/vdcscore/ui/home/StandingsAdapter.java +++ b/app/src/main/java/com/example/vdcscore/ui/home/StandingsAdapter.java @@ -18,11 +18,20 @@ import com.bumptech.glide.Glide; public class StandingsAdapter extends RecyclerView.Adapter { private List mTeams; + private OnTeamClickListener mListener; + + public interface OnTeamClickListener { + void onTeamClick(Team team); + } public StandingsAdapter() { this.mTeams = new ArrayList<>(); } + public void setOnTeamClickListener(OnTeamClickListener listener) { + this.mListener = listener; + } + public void setTeams(List teams) { this.mTeams = teams; notifyDataSetChanged(); @@ -72,6 +81,12 @@ public class StandingsAdapter extends RecyclerView.Adapter { + if (mListener != null) { + mListener.onTeamClick(team); + } + }); } @Override diff --git a/app/src/main/java/com/example/vdcscore/ui/home/Team.java b/app/src/main/java/com/example/vdcscore/ui/home/Team.java index 4293be3..fe161ce 100644 --- a/app/src/main/java/com/example/vdcscore/ui/home/Team.java +++ b/app/src/main/java/com/example/vdcscore/ui/home/Team.java @@ -1,7 +1,7 @@ package com.example.vdcscore.ui.home; @com.google.firebase.database.IgnoreExtraProperties -public class Team { +public class Team implements java.io.Serializable { private int team_id; private String nome; private int pontos; diff --git a/app/src/main/res/layout/fragment_club_detail.xml b/app/src/main/res/layout/fragment_club_detail.xml index f6611a4..b3dfc8e 100644 --- a/app/src/main/res/layout/fragment_club_detail.xml +++ b/app/src/main/res/layout/fragment_club_detail.xml @@ -61,150 +61,314 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"/> - + + + + - - + + android:orientation="horizontal" + android:gravity="center_vertical" + android:paddingVertical="8dp"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:text="10V" + android:textColor="#388E3C" + android:textStyle="bold" + android:textSize="14sp" + android:layout_marginEnd="16dp"/> + android:text="0E" + android:textColor="#FBC02D" + android:textStyle="bold" + android:textSize="14sp" + android:layout_marginEnd="16dp"/> + + - - - - - + + + android:orientation="horizontal" + android:gravity="center_vertical" + android:paddingVertical="8dp"> + + - - - - - - + + android:orientation="horizontal" + android:gravity="center_vertical" + android:paddingVertical="8dp"> + + + + + + +