import java.util.ArrayList;
import java.util.List;

public class PemindaiStatis {

    // Cuplikan kode yang diperiksa; beku agar hasil pemeriksaan deterministik
    static final String CUPLIKAN = """
            import java.util.List;
            import java.util.Date;

            public class PelangganService {
                public void SimpanData(int id) {
                    System.out.println("menyimpan " + id);
                }

                private boolean validasiEmail(String email) {
                    return email.contains("@");
                }
            }
            """;

    public static void main(String[] args) {
        String[] baris = CUPLIKAN.split("\n", -1);
        List<String> temuan = new ArrayList<>();

        for (int n = 0; n < baris.length; n++) {
            String b = baris[n].trim();

            // Aturan 1: nama method seharusnya diawali huruf kecil
            if (b.matches("(public|private|protected).*\\s([A-Z]\\w*)\\s*\\(.*")
                    && !b.contains("class ")) {
                temuan.add("baris " + (n + 1) + ": nama method diawali huruf kapital");
            }

            // Aturan 2: System.out.println tidak untuk kode produksi
            if (b.contains("System.out.println")) {
                temuan.add("baris " + (n + 1) + ": ganti System.out.println dengan logger");
            }

            // Aturan 3: baris melebihi 80 karakter
            if (b.length() > 80) {
                temuan.add("baris " + (n + 1) + ": panjang " + b.length() + " karakter (maks 80)");
            }
        }

        // Aturan 4: import yang tidak pernah dipakai
        for (String b : baris) {
            if (b.startsWith("import ")) {
                String kelas = b.substring(7, b.length() - 1);
                String sederhana = kelas.substring(kelas.lastIndexOf('.') + 1);
                if (hitungPemakaian(CUPLIKAN, sederhana) <= 1) {
                    temuan.add("import " + kelas + " tidak terpakai");
                }
            }
        }

        System.out.println("Jumlah temuan: " + temuan.size());
        for (String t : temuan) {
            System.out.println("- " + t);
        }
    }

    static int hitungPemakaian(String teks, String kata) {
        int jumlah = 0;
        int pos = teks.indexOf(kata);
        while (pos >= 0) {
            jumlah++;
            pos = teks.indexOf(kata, pos + kata.length());
        }
        return jumlah;
    }
}
