START TRANSACTION;

CREATE TABLE IF NOT EXISTS `tb_bentuk_sediaan` (
  `bentuk_sediaan_id` varchar(36) NOT NULL,
  `nama_bentuk` varchar(100) NOT NULL,
  `deskripsi` text DEFAULT NULL,
  `status_aktif` tinyint(1) DEFAULT 1,
  `created_at` timestamp NULL DEFAULT current_timestamp(),
  `updated_at` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`bentuk_sediaan_id`),
  UNIQUE KEY `uk_bentuk_sediaan_nama` (`nama_bentuk`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `tb_master_obat` (
  `obat_id` varchar(36) NOT NULL,
  `kode_obat` varchar(30) NOT NULL,
  `nama_obat` varchar(255) NOT NULL,
  `bentuk_sediaan_id` varchar(36) DEFAULT NULL,
  `satuan_kecil` varchar(50) NOT NULL,
  `kategori` varchar(100) DEFAULT NULL,
  `harga_beli` decimal(15,2) DEFAULT 0.00,
  `harga_jual` decimal(15,2) DEFAULT 0.00,
  `stok_minimum` decimal(15,2) DEFAULT 0.00,
  `status_aktif` tinyint(1) DEFAULT 1,
  `created_at` timestamp NULL DEFAULT current_timestamp(),
  `updated_at` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`obat_id`),
  UNIQUE KEY `uk_master_obat_kode` (`kode_obat`),
  KEY `idx_master_obat_nama` (`nama_obat`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `tb_lokasi_stok` (
  `lokasi_id` varchar(36) NOT NULL,
  `kode_lokasi` varchar(30) NOT NULL,
  `nama_lokasi` varchar(100) NOT NULL,
  `jenis_lokasi` enum('GUDANG','FARMASI','POLI') NOT NULL DEFAULT 'GUDANG',
  `status_aktif` tinyint(1) DEFAULT 1,
  `created_at` timestamp NULL DEFAULT current_timestamp(),
  `updated_at` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`lokasi_id`),
  UNIQUE KEY `uk_lokasi_kode` (`kode_lokasi`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `tb_stok_obat` (
  `stok_id` varchar(36) NOT NULL,
  `obat_id` varchar(36) NOT NULL,
  `lokasi_id` varchar(36) NOT NULL,
  `qty` decimal(15,2) DEFAULT 0.00,
  `updated_at` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`stok_id`),
  UNIQUE KEY `uk_stok_obat_lokasi` (`obat_id`,`lokasi_id`),
  KEY `idx_stok_lokasi` (`lokasi_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `tb_resep` (
  `resep_id` varchar(36) NOT NULL,
  `pelayanan_id` varchar(36) NOT NULL,
  `registrasi_id` varchar(36) NOT NULL,
  `pasien_id` varchar(36) NOT NULL,
  `dokter_id` varchar(36) DEFAULT NULL,
  `id_poli` varchar(36) DEFAULT NULL,
  `tanggal_resep` datetime NOT NULL,
  `status_resep` enum('MENUNGGU','DIPROSES','SELESAI','BATAL') DEFAULT 'MENUNGGU',
  `catatan` text DEFAULT NULL,
  `processed_by` varchar(36) DEFAULT NULL,
  `processed_at` datetime DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT current_timestamp(),
  `updated_at` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`resep_id`),
  UNIQUE KEY `uk_resep_pelayanan` (`pelayanan_id`),
  KEY `idx_resep_registrasi` (`registrasi_id`),
  KEY `idx_resep_pasien` (`pasien_id`),
  KEY `idx_resep_status` (`status_resep`),
  KEY `idx_resep_dokter` (`dokter_id`),
  KEY `idx_resep_poli` (`id_poli`),
  KEY `idx_resep_processed_by` (`processed_by`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `tb_resep_detail` (
  `resep_detail_id` varchar(36) NOT NULL,
  `resep_id` varchar(36) NOT NULL,
  `obat_id` varchar(36) DEFAULT NULL,
  `nama_obat_snapshot` varchar(255) NOT NULL,
  `dosis` varchar(100) DEFAULT NULL,
  `frekuensi` varchar(100) DEFAULT NULL,
  `rute` varchar(100) DEFAULT NULL,
  `durasi` varchar(100) DEFAULT NULL,
  `jumlah_resep` decimal(15,2) DEFAULT 0.00,
  `jumlah_serah` decimal(15,2) DEFAULT 0.00,
  `satuan_snapshot` varchar(50) DEFAULT NULL,
  `catatan` text DEFAULT NULL,
  `status_detail` enum('MENUNGGU','SEBAGIAN','SELESAI','BATAL') DEFAULT 'MENUNGGU',
  `created_at` timestamp NULL DEFAULT current_timestamp(),
  PRIMARY KEY (`resep_detail_id`),
  KEY `idx_resep_detail_resep` (`resep_id`),
  KEY `idx_resep_detail_obat` (`obat_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `tb_mutasi_stok` (
  `mutasi_id` varchar(36) NOT NULL,
  `obat_id` varchar(36) NOT NULL,
  `lokasi_id` varchar(36) NOT NULL,
  `resep_id` varchar(36) DEFAULT NULL,
  `referensi_tipe` enum('PEMBELIAN','PENYESUAIAN','RESEP','RETUR') NOT NULL,
  `referensi_id` varchar(36) DEFAULT NULL,
  `jenis_mutasi` enum('MASUK','KELUAR','ADJUSTMENT') NOT NULL,
  `qty` decimal(15,2) NOT NULL,
  `saldo_sebelum` decimal(15,2) NOT NULL,
  `saldo_sesudah` decimal(15,2) NOT NULL,
  `keterangan` text DEFAULT NULL,
  `created_by` varchar(36) DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT current_timestamp(),
  PRIMARY KEY (`mutasi_id`),
  KEY `idx_mutasi_obat` (`obat_id`),
  KEY `idx_mutasi_lokasi` (`lokasi_id`),
  KEY `idx_mutasi_resep` (`resep_id`),
  KEY `idx_mutasi_created_by` (`created_by`),
  KEY `idx_mutasi_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

ALTER TABLE `tb_master_obat`
  ADD COLUMN IF NOT EXISTS `bentuk_sediaan_id` varchar(36) DEFAULT NULL AFTER `nama_obat`;

ALTER TABLE `tb_terapi`
  ADD COLUMN IF NOT EXISTS `obat_id` varchar(36) DEFAULT NULL AFTER `pelayanan_id`,
  ADD COLUMN IF NOT EXISTS `satuan` varchar(50) DEFAULT NULL AFTER `jumlah`;

ALTER TABLE `tb_terapi`
  ADD INDEX IF NOT EXISTS `idx_terapi_obat_id` (`obat_id`);

INSERT INTO `tb_lokasi_stok` (`lokasi_id`, `kode_lokasi`, `nama_lokasi`, `jenis_lokasi`, `status_aktif`)
VALUES
  ('LOC-GUDANG-UTAMA', 'GUDANG-UTAMA', 'Gudang Utama', 'GUDANG', 1),
  ('LOC-FARMASI-UTAMA', 'FARMASI-UTAMA', 'Farmasi Utama', 'FARMASI', 1)
ON DUPLICATE KEY UPDATE
  `nama_lokasi` = VALUES(`nama_lokasi`),
  `jenis_lokasi` = VALUES(`jenis_lokasi`),
  `status_aktif` = VALUES(`status_aktif`);

INSERT INTO `tb_bentuk_sediaan` (`bentuk_sediaan_id`, `nama_bentuk`, `deskripsi`, `status_aktif`)
VALUES
  ('BSD-TABLET', 'Tablet', 'Sediaan padat berbentuk tablet', 1),
  ('BSD-KAPSUL', 'Kapsul', 'Sediaan padat berbentuk kapsul', 1),
  ('BSD-SIRUP', 'Sirup', 'Sediaan cair oral', 1),
  ('BSD-INJEKSI', 'Injeksi', 'Sediaan injeksi', 1)
ON DUPLICATE KEY UPDATE
  `nama_bentuk` = VALUES(`nama_bentuk`),
  `deskripsi` = VALUES(`deskripsi`),
  `status_aktif` = VALUES(`status_aktif`);

COMMIT;
