CREATE TABLE member (
    id_member int(11) PRIMARY KEY,
    nama VARCHAR(59) NOT NULL,
    no_hp VARCHAR(20) NOT NULL UNIQUE,
    point INT NOT NULL DEFAULT 0,
    tgl_lahir DATE NULL,
    email varchar(30),
    kota varchar(30),
    tgl_daftar TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE reward (
    id int(11) PRIMARY KEY ,
    nama VARCHAR(255) NOT NULL,
    kode VARCHAR(20) NOT NULL,
    harga int(10) NOT NULL,
    jenis_hadiah ENUM('TUKAR_POIN', 'HADIAH_LANGSUNG') NOT NULL,
    kode_menu CHAR(20) NULL, -- Referensi ke tabel menu Anda
    poin_tukar INT NOT NULL DEFAULT 0,
    poin_bonus INT NOT NULL DEFAULT 0,
    dt DATE,
    st DATE,
    aktif BOOLEAN NOT NULL DEFAULT TRUE
);

CREATE TABLE trx_member (
    id int(11) PRIMARY KEY,
    member int(11) NOT NULL,
    jenis ENUM('ADD_POINT', 'REDEEM') NOT NULL,
    point INT NOT NULL, -- (+) untuk poin masuk, (-) untuk poin keluar
    jual CHAR(20) NULL, -- Referensi ke tabel penjualan Anda
    reward int(11) NULL,
    cab varchar(3);
    brand varchar(3);
    tanggal TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP   
);



DELIMITER $$

CREATE TRIGGER `jual_after_insert` 
AFTER INSERT ON `jual` 
FOR EACH ROW 
BEGIN
  -- Cek jika ada ID member dan poin yang diberikan lebih dari 0
  IF NEW.member IS NOT NULL AND NEW.member != '' AND NEW.gift > 0 THEN
    INSERT INTO `trx_member` (
      `member`, `jenis`, `point`, `jual`, `cab`, `brand`, `tanggal`
    ) 
    VALUES
      (
        NEW.member, 
        'ADD POINT', 
        NEW.gift, 
        NEW.nomor, 
        NEW.cab, 
        NEW.brand, 
        STR_TO_DATE(NEW.jamm, '%Y-%m-%d %H:%i:%s') -- Konversi CHAR ke TIMESTAMP
      );
  END IF;
END$$

DELIMITER ;

DELIMITER $$

CREATE TRIGGER `jual_after_update`
AFTER UPDATE ON `jual`
FOR EACH ROW
BEGIN
  -- Cek jika transaksi dibatalkan (kolom 'batal' berubah dari 0 ke 1)
  IF OLD.batal = 0 AND NEW.batal = 1 THEN
    -- Pastikan transaksi yang dibatalkan memang memiliki member dan poin
    IF OLD.member IS NOT NULL AND OLD.member != '' AND OLD.gift > 0 THEN
      INSERT INTO `trx_member` (
        `member`, `jenis`, `point`, `jual`, `cab`, `brand`, `tanggal`
      )
      VALUES
        (
          OLD.member,
          'VOID POINT',   -- Jenis transaksi untuk pembatalan
          -OLD.gift,      -- Poin dibuat menjadi negatif untuk mengurangi
          OLD.nomor,
          OLD.cab,
          OLD.brand,
          NOW()           -- Gunakan waktu saat ini untuk waktu pembatalan
        );
    END IF;
  END IF;
END$$

DELIMITER ;

DELIMITER $$

CREATE TRIGGER `trx_member_after_insert` 
AFTER INSERT ON `trx_member` 
FOR EACH ROW 
BEGIN
  -- Tambahkan poin dari baris baru ke total poin member
  -- Ini berfungsi untuk poin positif (ADD) dan negatif (VOID)
  UPDATE
    `member`
  SET
    `point` = `point` + NEW.point
  WHERE
    `id` = NEW.member;
END$$
DELIMITER ;


DELIMITER $$

CREATE TRIGGER `trx_member_after_update` 
AFTER UPDATE ON `trx_member` 
FOR EACH ROW 
BEGIN
  -- Sesuaikan total poin: Kurangi poin lama, lalu tambahkan poin baru
  UPDATE
    `member`
  SET
    `point` = (`point` - OLD.point) + NEW.point
  WHERE
    `id` = NEW.member;
END$$

DELIMITER ;


DELIMITER $$

CREATE TRIGGER `trx_member_after_delete` 
AFTER DELETE ON `trx_member` 
FOR EACH ROW 
BEGIN
  -- Kurangi total poin dengan poin dari baris yang dihapus
  UPDATE
    `member`
  SET
    `point` = `point` - OLD.point
  WHERE
    `id` = OLD.member;
END$$

DELIMITER ;

