DROP DATABASE IF EXISTS horizon_asset;
CREATE DATABASE horizon_asset CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE horizon_asset;

CREATE TABLE users (
 id INT AUTO_INCREMENT PRIMARY KEY,
 name VARCHAR(100) NOT NULL,
 username VARCHAR(60) NOT NULL UNIQUE,
 password VARCHAR(255) NOT NULL,
 role ENUM('admin','user','tamu','pimpinan','staf_tu','guru','satpam','parkir','takmir') NOT NULL DEFAULT 'user',
 status ENUM('aktif','nonaktif') NOT NULL DEFAULT 'aktif',
 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;

CREATE TABLE departemen (id_dep INT AUTO_INCREMENT PRIMARY KEY,kode_dep VARCHAR(100) NOT NULL,nama_departemen VARCHAR(100) NOT NULL,keterangan TEXT NULL) ENGINE=InnoDB;
CREATE TABLE supplier (id_sup INT AUTO_INCREMENT PRIMARY KEY,nama_supplier VARCHAR(100) NOT NULL,alamat_lengkap TEXT NULL,no_telp VARCHAR(20) NULL) ENGINE=InnoDB;
CREATE TABLE lokasi (id_lok INT AUTO_INCREMENT PRIMARY KEY,kode_lok VARCHAR(100) NOT NULL,nama_lokasi VARCHAR(100) NOT NULL,departemen VARCHAR(100) NOT NULL) ENGINE=InnoDB;
CREATE TABLE kondisi (id_kon INT AUTO_INCREMENT PRIMARY KEY,nama_kondisi VARCHAR(100) NOT NULL) ENGINE=InnoDB;
CREATE TABLE jenis_pengadaan (id_jenis_pendagaan INT AUTO_INCREMENT PRIMARY KEY,kode_pengadaan VARCHAR(100) NOT NULL,jenis_pengadaan VARCHAR(100) NOT NULL,keterangan TEXT NULL) ENGINE=InnoDB;
CREATE TABLE kategori (id_kategori INT AUTO_INCREMENT PRIMARY KEY,kode_kategori VARCHAR(100) NOT NULL,katerogi VARCHAR(100) NOT NULL,keterangan TEXT NULL) ENGINE=InnoDB;
CREATE TABLE barang (id_barang INT AUTO_INCREMENT PRIMARY KEY,kode_barang VARCHAR(100) NOT NULL,kode_inventaris VARCHAR(100) NOT NULL,nama_barang VARCHAR(100) NOT NULL,merek VARCHAR(100) NULL,kategori VARCHAR(100) NULL,jumlah INT NOT NULL DEFAULT 0,satuan VARCHAR(50) NULL,gambar VARCHAR(100) NULL,keterangan TEXT NULL,kondisi VARCHAR(100) NULL,harga DECIMAL(15,2) DEFAULT 0,usia_barang VARCHAR(100) NULL,nilai_residu VARCHAR(100) NULL) ENGINE=InnoDB;
CREATE TABLE pengadaan (id_pengadaan INT AUTO_INCREMENT PRIMARY KEY,tanggal_pengadaan DATE NOT NULL,supplier VARCHAR(100) NOT NULL,jenis_pengadaan VARCHAR(100) NOT NULL,keterangan TEXT NULL,id_barang INT NULL,nama_barang VARCHAR(100) NOT NULL,deskripsi_barang TEXT NULL,harga INT NOT NULL DEFAULT 0,total INT NOT NULL DEFAULT 0,jumlah INT NOT NULL DEFAULT 0) ENGINE=InnoDB;
CREATE TABLE penempatan (id_penempatan INT AUTO_INCREMENT PRIMARY KEY,tanggal_penempatan DATE NOT NULL,departemen VARCHAR(100) NOT NULL,lokasi VARCHAR(100) NOT NULL,keterangan TEXT NULL,nama_barang VARCHAR(100) NOT NULL,jumlah INT NOT NULL DEFAULT 0) ENGINE=InnoDB;
CREATE TABLE mutasi (id_mutasi INT AUTO_INCREMENT PRIMARY KEY,id_penempatan VARCHAR(100) NOT NULL,tanggal_mutasi DATE NOT NULL,keterangan TEXT NULL,departemen VARCHAR(100) NOT NULL,lokasi VARCHAR(100) NOT NULL,nama_barang VARCHAR(100) NOT NULL) ENGINE=InnoDB;

CREATE TABLE peminjaman (id_peminjaman INT AUTO_INCREMENT PRIMARY KEY,tanggal_pinjam DATE NOT NULL,nama_peminjam VARCHAR(100) NOT NULL,role_peminjam VARCHAR(50) NULL,nama_barang VARCHAR(100) NOT NULL,jumlah INT NOT NULL DEFAULT 1,tanggal_rencana_kembali DATE NULL,status ENUM('dipinjam','selesai','ditolak') NOT NULL DEFAULT 'dipinjam',keterangan TEXT NULL) ENGINE=InnoDB;
CREATE TABLE pengembalian (id_pengembalian INT AUTO_INCREMENT PRIMARY KEY,tanggal_kembali DATE NOT NULL,id_peminjaman INT NULL,nama_peminjam VARCHAR(100) NULL,nama_barang VARCHAR(100) NOT NULL,jumlah INT NOT NULL DEFAULT 1,kondisi_kembali VARCHAR(100) NULL,status ENUM('dikembalikan','rusak','hilang') NOT NULL DEFAULT 'dikembalikan',keterangan TEXT NULL) ENGINE=InnoDB;
CREATE TABLE retur (id_retur INT AUTO_INCREMENT PRIMARY KEY,tanggal_retur DATE NOT NULL,nama_barang VARCHAR(100) NOT NULL,supplier VARCHAR(100) NULL,jumlah INT NOT NULL DEFAULT 1,alasan VARCHAR(200) NULL,status ENUM('proses','selesai','ditolak') NOT NULL DEFAULT 'proses',keterangan TEXT NULL) ENGINE=InnoDB;

INSERT INTO peminjaman(tanggal_pinjam,nama_peminjam,role_peminjam,nama_barang,jumlah,tanggal_rencana_kembali,status,keterangan) VALUES (CURDATE(),'Guru Demo','guru','Laptop Admin',1,DATE_ADD(CURDATE(),INTERVAL 7 DAY),'dipinjam','Peminjaman untuk pembelajaran');
INSERT INTO retur(tanggal_retur,nama_barang,supplier,jumlah,alasan,status,keterangan) VALUES (CURDATE(),'Laptop Admin','Senyum Media Nusantara',1,'Barang perlu klaim garansi','proses','Retur demo');


INSERT INTO users(name,username,password,role,status) VALUES
('Admin','admin','$2y$12$XwtEpCe1PAhWDUoqufPUseduN/4ZMCZAwO91x9yZJvv.cIAFeuxka','admin','aktif'),
('Pimpinan','pimpinan','$2y$12$XwtEpCe1PAhWDUoqufPUseduN/4ZMCZAwO91x9yZJvv.cIAFeuxka','pimpinan','aktif'),
('User','user','$2y$12$XwtEpCe1PAhWDUoqufPUseduN/4ZMCZAwO91x9yZJvv.cIAFeuxka','user','aktif'),
('Tamu','tamu','$2y$12$XwtEpCe1PAhWDUoqufPUseduN/4ZMCZAwO91x9yZJvv.cIAFeuxka','tamu','aktif'),
('Staf TU','staf_tu','$2y$12$XwtEpCe1PAhWDUoqufPUseduN/4ZMCZAwO91x9yZJvv.cIAFeuxka','staf_tu','aktif'),
('Guru','guru','$2y$12$XwtEpCe1PAhWDUoqufPUseduN/4ZMCZAwO91x9yZJvv.cIAFeuxka','guru','aktif'),
('Satpam','satpam','$2y$12$XwtEpCe1PAhWDUoqufPUseduN/4ZMCZAwO91x9yZJvv.cIAFeuxka','satpam','aktif'),
('Parkir','parkir','$2y$12$XwtEpCe1PAhWDUoqufPUseduN/4ZMCZAwO91x9yZJvv.cIAFeuxka','parkir','aktif'),
('Takmir','takmir','$2y$12$XwtEpCe1PAhWDUoqufPUseduN/4ZMCZAwO91x9yZJvv.cIAFeuxka','takmir','aktif');

INSERT INTO departemen(kode_dep,nama_departemen,keterangan) VALUES ('TU','Tata Usaha','Departemen administrasi'),('GURU','Guru','Unit guru');
INSERT INTO supplier(nama_supplier,alamat_lengkap,no_telp) VALUES ('Senyum Media Nusantara','Jalan Kalimantan Jember','08123456789');
INSERT INTO lokasi(kode_lok,nama_lokasi,departemen) VALUES ('R001','Ruang Kelas 1','Guru'),('MUS','Mushola','Takmir');
INSERT INTO kondisi(nama_kondisi) VALUES ('Baru'),('Baik'),('Rusak Ringan'),('Rusak Berat');
INSERT INTO jenis_pengadaan(kode_pengadaan,jenis_pengadaan,keterangan) VALUES ('BLI','Pembelian','');
INSERT INTO kategori(kode_kategori,katerogi,keterangan) VALUES ('COMP','COMPUTER',''),('MEB','Mebel','');
INSERT INTO barang(kode_barang,kode_inventaris,nama_barang,merek,kategori,jumlah,satuan,kondisi,harga,usia_barang,nilai_residu) VALUES ('BRG-001','INV-2026-001','Laptop Admin','Lenovo','COMPUTER',2,'Unit','Baru',7500000,'4 Tahun','500000');
