-- DATABASE: si_inventaris_tkjt
CREATE DATABASE IF NOT EXISTS si_inventaris_tkjt CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE si_inventaris_tkjt;

-- 1) Admin
CREATE TABLE admin (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  nama VARCHAR(191) NOT NULL,
  email VARCHAR(191) NOT NULL UNIQUE,
  password TEXT NOT NULL, -- plaintext sesuai permintaan
  telepon VARCHAR(50),
  created_at TIMESTAMP NULL DEFAULT NULL,
  updated_at TIMESTAMP NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 2) Guru
CREATE TABLE guru (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  nip VARCHAR(50) UNIQUE,
  nama VARCHAR(191) NOT NULL,
  email VARCHAR(191) NOT NULL UNIQUE,
  password TEXT NOT NULL, -- plaintext
  telepon VARCHAR(50),
  jabatan VARCHAR(100) DEFAULT 'Guru',
  harus_setujui_sarpras TINYINT(1) DEFAULT 0, -- flag apakah guru sudah setuju aturan sinkron
  created_at TIMESTAMP NULL DEFAULT NULL,
  updated_at TIMESTAMP NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 3) Siswa
CREATE TABLE siswa (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  nis VARCHAR(50) UNIQUE,
  nama VARCHAR(191) NOT NULL,
  email VARCHAR(191) NOT NULL UNIQUE,
  password TEXT NOT NULL, -- plaintext
  kelas VARCHAR(50),
  jurusan VARCHAR(100) DEFAULT 'TKJT',
  telepon VARCHAR(50),
  created_at TIMESTAMP NULL DEFAULT NULL,
  updated_at TIMESTAMP NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 4) Kategori inventaris
CREATE TABLE kategori_inventaris (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  nama VARCHAR(100) NOT NULL,
  deskripsi TEXT,
  created_at TIMESTAMP NULL DEFAULT NULL,
  updated_at TIMESTAMP NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 5) Inventaris (alat milik jurusan)
CREATE TABLE inventaris (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  kode_barang VARCHAR(100) NOT NULL UNIQUE,
  nama_barang VARCHAR(191) NOT NULL,
  id_kategori INT UNSIGNED,
  jumlah INT DEFAULT 0,
  kondisi VARCHAR(100) DEFAULT 'Baik',
  lokasi VARCHAR(191) DEFAULT 'Laboratorium TKJT',
  keterangan TEXT,
  created_at TIMESTAMP NULL DEFAULT NULL,
  updated_at TIMESTAMP NULL DEFAULT NULL,
  FOREIGN KEY (id_kategori) REFERENCES kategori_inventaris(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 6) Inventaris Guru (alat yang dimiliki/dicatat oleh guru)
CREATE TABLE inventaris_guru (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  id_guru BIGINT UNSIGNED NOT NULL,
  kode_barang VARCHAR(100) NOT NULL,
  nama_barang VARCHAR(191) NOT NULL,
  jumlah INT DEFAULT 1,
  kondisi VARCHAR(100) DEFAULT 'Baik',
  lokasi VARCHAR(191) DEFAULT NULL,
  keterangan TEXT,
  sync_sarpras TINYINT(1) DEFAULT 0, -- sudah dikirim ke sarpras atau belum
  created_at TIMESTAMP NULL DEFAULT NULL,
  updated_at TIMESTAMP NULL DEFAULT NULL,
  FOREIGN KEY (id_guru) REFERENCES guru(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 7) Barang (unit/tipe untuk peminjaman) - barang bisa berkaitan dengan inventaris
CREATE TABLE barang (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  kode VARCHAR(100) UNIQUE,
  nama VARCHAR(191) NOT NULL,
  id_inventaris BIGINT UNSIGNED NULL,
  stok INT DEFAULT 0,
  kondisi VARCHAR(100) DEFAULT 'Baik',
  created_at TIMESTAMP NULL DEFAULT NULL,
  updated_at TIMESTAMP NULL DEFAULT NULL,
  FOREIGN KEY (id_inventaris) REFERENCES inventaris(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 8) Bahan Praktik (habis pakai)
CREATE TABLE bahan_praktik (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  kode VARCHAR(100) UNIQUE,
  nama VARCHAR(191) NOT NULL,
  stok DECIMAL(10,2) DEFAULT 0,
  satuan VARCHAR(50) DEFAULT 'pcs',
  keterangan TEXT,
  created_at TIMESTAMP NULL DEFAULT NULL,
  updated_at TIMESTAMP NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 9) Aturan Peminjaman
CREATE TABLE aturan_peminjaman (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  nama VARCHAR(191) NOT NULL,
  deskripsi TEXT,
  maksimal_hari INT DEFAULT 7,
  denda_per_hari DECIMAL(10,2) DEFAULT 0,
  perlu_persetujuan_guru TINYINT(1) DEFAULT 1,
  aktif TINYINT(1) DEFAULT 1,
  created_at TIMESTAMP NULL DEFAULT NULL,
  updated_at TIMESTAMP NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 10) Peminjaman Alat (master)
CREATE TABLE peminjaman_alat (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  kode_peminjaman VARCHAR(100) UNIQUE,
  peminjam_id BIGINT UNSIGNED NOT NULL,
  peminjam_role ENUM('siswa','guru') NOT NULL,
  id_guru_persetujuan BIGINT UNSIGNED NULL, -- guru yang setuju/menolak
  id_admin_verifikasi BIGINT UNSIGNED NULL,
  tanggal_pinjam DATE NOT NULL,
  tanggal_kembali DATE NULL,
  status ENUM('pending','disetujui','dipinjam','dikembalikan','ditolak','dibatalkan') DEFAULT 'pending',
  alasan TEXT,
  aturan_id INT UNSIGNED NULL,
  total_barang INT DEFAULT 0,
  denda DECIMAL(10,2) DEFAULT 0,
  created_at TIMESTAMP NULL DEFAULT NULL,
  updated_at TIMESTAMP NULL DEFAULT NULL,
  FOREIGN KEY (aturan_id) REFERENCES aturan_peminjaman(id) ON DELETE SET NULL,
  FOREIGN KEY (id_guru_persetujuan) REFERENCES guru(id) ON DELETE SET NULL,
  FOREIGN KEY (id_admin_verifikasi) REFERENCES admin(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 11) Peminjaman Detail
CREATE TABLE peminjaman_detail (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  peminjaman_id BIGINT UNSIGNED NOT NULL,
  id_barang BIGINT UNSIGNED NOT NULL,
  jumlah INT DEFAULT 1,
  kondisi_pinjam VARCHAR(191) DEFAULT 'Baik',
  kondisi_kembali VARCHAR(191) DEFAULT NULL,
  keterangan TEXT,
  created_at TIMESTAMP NULL DEFAULT NULL,
  updated_at TIMESTAMP NULL DEFAULT NULL,
  FOREIGN KEY (peminjaman_id) REFERENCES peminjaman_alat(id) ON DELETE CASCADE,
  FOREIGN KEY (id_barang) REFERENCES barang(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 12) Penggunaan Bahan (master)
CREATE TABLE penggunaan_bahan (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  kode_penggunaan VARCHAR(100) UNIQUE,
  id_siswa BIGINT UNSIGNED NOT NULL,
  id_guru BIGINT UNSIGNED NULL, -- guru pembimbing
  tanggal DATE NOT NULL,
  keterangan TEXT,
  created_at TIMESTAMP NULL DEFAULT NULL,
  updated_at TIMESTAMP NULL DEFAULT NULL,
  FOREIGN KEY (id_siswa) REFERENCES siswa(id) ON DELETE CASCADE,
  FOREIGN KEY (id_guru) REFERENCES guru(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 13) Penggunaan Bahan Detail
CREATE TABLE penggunaan_bahan_detail (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  penggunaan_id BIGINT UNSIGNED NOT NULL,
  id_bahan BIGINT UNSIGNED NOT NULL,
  jumlah DECIMAL(10,2) DEFAULT 0,
  satuan VARCHAR(50) DEFAULT 'pcs',
  keterangan TEXT,
  created_at TIMESTAMP NULL DEFAULT NULL,
  updated_at TIMESTAMP NULL DEFAULT NULL,
  FOREIGN KEY (penggunaan_id) REFERENCES penggunaan_bahan(id) ON DELETE CASCADE,
  FOREIGN KEY (id_bahan) REFERENCES bahan_praktik(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 14) API koneksi Sarpras
CREATE TABLE api_koneksi_sarpras (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  nama_aplikasi VARCHAR(191),
  endpoint_url VARCHAR(255),
  token_plain TEXT, -- token plaintext sesuai permintaan
  aktif TINYINT(1) DEFAULT 1,
  last_sync TIMESTAMP NULL DEFAULT NULL,
  created_at TIMESTAMP NULL DEFAULT NULL,
  updated_at TIMESTAMP NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 15) Log sinkron ke Sarpras
CREATE TABLE sarpras_sync_logs (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  id_koneksi INT UNSIGNED NULL,
  tipe_data VARCHAR(100), -- mis: inventaris_guru
  payload TEXT,
  status ENUM('success','failed') DEFAULT 'success',
  pesan TEXT,
  created_at TIMESTAMP NULL DEFAULT NULL,
  FOREIGN KEY (id_koneksi) REFERENCES api_koneksi_sarpras(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 16) Persetujuan Sarpras (catatan guru setuju aturan)
CREATE TABLE persetujuan_sarpras (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  id_guru BIGINT UNSIGNED NOT NULL,
  id_aturan INT UNSIGNED NOT NULL,
  setuju TINYINT(1) DEFAULT 0,
  tanggal_setuju TIMESTAMP NULL DEFAULT NULL,
  catatan TEXT,
  FOREIGN KEY (id_guru) REFERENCES guru(id) ON DELETE CASCADE,
  FOREIGN KEY (id_aturan) REFERENCES aturan_peminjaman(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
