import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.Comparator;

public class PembuatTabel {
    /** Menghasilkan DDL CREATE TABLE dari annotation pada class entitas. */
    public static String buatDdl(Class<?> entitas) {
        Tabel tabel = entitas.getAnnotation(Tabel.class);
        if (tabel == null) {
            throw new IllegalArgumentException("class tanpa @Tabel: " + entitas.getSimpleName());
        }
        Field[] field = entitas.getDeclaredFields();
        Arrays.sort(field, Comparator.comparing(Field::getName)); // urutan stabil

        StringBuilder sql = new StringBuilder("CREATE TABLE ");
        sql.append(tabel.nama()).append(" (\n");
        String pemisah = "";
        for (Field f : field) {
            Kolom k = f.getAnnotation(Kolom.class);
            if (k == null) {
                continue; // field tanpa @Kolom bukan kolom tabel
            }
            sql.append(pemisah)
               .append("    ").append(k.nama())
               .append(" ").append(k.tipe());
            if (k.tidakNull()) {
                sql.append(" NOT NULL");
            }
            if (k.kunciUtama()) {
                sql.append(" PRIMARY KEY");
            }
            pemisah = ",\n";
        }
        sql.append("\n);");
        return sql.toString();
    }
}
