# Skrip seed dengan psycopg: data tetap, idempoten, bisa dijalankan
# berulang kapan saja tanpa menimbulkan duplikat.
import psycopg

PELANGGAN = [
    (1, "Budi", "budi@example.com"),
    (2, "Siti", "siti@example.com"),
    (3, "Ani", "ani@example.com"),
]

conn = psycopg.connect()
cur = conn.cursor()


def jalankan_seed():
    cur.execute("""
        CREATE TABLE IF NOT EXISTS pelanggan_seed (
            id    integer PRIMARY KEY,
            nama  text NOT NULL,
            email text NOT NULL UNIQUE
        )
    """)
    # ON CONFLICT DO NOTHING tanpa target menangkap pelanggaran
    # constraint apa pun (primary key maupun unique) dan melewatkan
    # baris itu.
    cur.executemany(
        """
        INSERT INTO pelanggan_seed (id, nama, email)
        VALUES (%s, %s, %s)
        ON CONFLICT DO NOTHING
        """,
        PELANGGAN,
    )
    conn.commit()


jalankan_seed()
cur.execute("SELECT count(*) FROM pelanggan_seed")
print("setelah seed pertama :", cur.fetchone()[0], "pelanggan")

jalankan_seed()
cur.execute("SELECT count(*) FROM pelanggan_seed")
print("setelah seed kedua   :", cur.fetchone()[0], "pelanggan")

cur.execute("SELECT id, nama, email FROM pelanggan_seed ORDER BY id")
for id_pelanggan, nama, email in cur.fetchall():
    print(f"{id_pelanggan} {nama} <{email}>")

cur.close()
conn.close()
