class SubstanceCategorizer
  SUBSTANCE_CATEGORIES = {
    "Psychedelics" => [
      "LSD", "Psilocybin", "DMT", "Mescaline", "2C-B", "2C-E", "2C-I", "25C-NBOMe", "25B-NBOH", "2C-B-Fly",
      "4-AcO-DMT", "4-AcO-EPT", "4-HO-MiPT", "5-MeO-MiPT", "ALD-52", "1cP-LSD", "1D-LSD", "1P-LSD", "1V-LSD",
      "LSA", "Salvia Divinorum", "Psilocybe Tampelandia"
    ].freeze,
    
    "Stimulants" => [
      "Amphetamine", "Dextroamphetamine", "Dextroamphetamine Phosphate", "Lisdexamfetamine", 
      "Methamphetamine", "Cocaine", "Methylphenidate", "Atomoxetine", "Modafinil", "Armodafinil", "Flmodafinil",
      "Caffeine", "Nicotine", "3-FMA", "4-FMA", "2-FMA", "4-FMPH", "Ethylphenidate", "Isopropylphenidate",
      "3-MMC", "4-MMC", "4-EMC", "4-MEC", "3-MEC", "4-BMC", "2-MMC", "3-CMC", "4-FMC", "3-FMC",
      "4-MeMABP", "4-MPD", "NEP", "HEP", "Cyclazodone", "Bupropion", "Phenethylline"
    ].freeze,
    
    "Depressants" => [
      "Ethanol", "GHB", "1,4-BDO", "Diazepam", "Clonazepam", "Alprazolam", "Lorazepam", "Temazepam", 
      "Oxazepam", "Bromazepam", "Clobazam", "Nitrazepam", "Diclazepam", "Flualprazolam", "Flubromazepam", 
      "Flubromazolam", "Bromazolam", "Clonazolam", "Etizolam", "Bretazenil", "Brotizolam", "Gidazepam",
      "Phenibut", "F-Phenibut", "Gabapentin", "Pregabalin", "Baclofen", "Carisoprodol", "Cyclobenzaprine",
      "Zolpidem", "Zopiclone", "Midazolam"
    ].freeze,
    
    "Dissociatives" => [
      "Ketamine", "Esketamine", "DCK", "2-FDCK", "O-PCE", "3-HO-PCE", "3-HO-PCP", "3-Me-PCP", "3-ME-PCPy",
      "a-PCyP", "Dextromethorphan", "Dextromethorphan Hydrobromide", "Dextromethorphan Polistirex", 
      "Methoxetamine", "DMXE", "FXE", "Hydroxetamine", "MXiPr", "MXPr", "Tiletamine"
    ].freeze,
    
    "Opioids" => [
      "Heroin", "Morphine", "Codeine", "Dihydrocodeine", "Oxycodone", "Hydrocodone", "Hydromorphone", 
      "Buprenorphine", "Methadone", "Fentanyl", "Carfentanil", "Tramadol", "Tapentadol", "O-DSMT"
    ].freeze,
    
    "Cannabis" => [
      "Weed", "THC-O", "THC-P", "HHC", "HHC-O", "HHC-P", "10-OH-HHC"
    ].freeze,
    
    "Nootropics" => [
      "Modafinil", "Armodafinil", "Flmodafinil", "Piracetam", "Oxiracetam", "Aniracetam", "Phenylpiracetam",
      "Noopept", "Alpha-GPC", "CDP-Choline", "Bacopa Monnieri", "Lion's Mane", "Rhodiola Rosea"
    ].freeze,
    
    "Medications" => [
      "Aspirin", "Ibuprofen", "Paracetamol", "Dexibuprofen", "Flurbiprofen", "Indometacin", "Celecoxib",
      "Metamizole", "Amitriptyline", "Citalopram", "Escitalopram", "Venlafaxine", "Mirtazapine", "Dosulepin",
      "Lithium", "Olanzapine", "Quetiapine", "Risperidone", "Clozapine", "Amisulpride", "Haloperidol",
      "Lamotrigine", "Carbamazepine", "Oxcarbazepine", "Valproate", "Levodopa", "Carbidopa", "Biperiden",
      "Trihexyphenidyl", "Domperidone", "Prochlorperazine", "Ondansetron", "Omeprazole", "Pantoprazole",
      "Hyoscine Butylbromide", "Loperamide", "Docusate", "Simeticone", "Cetirizine", "Levocetirizine",
      "Fexofenadine", "Loratadine", "Hydroxyzine", "Diphenhydramine", "Dimenhydrinate", "Promethazine",
      "Alimemazine", "Dexamethasone", "Prednisone", "Amoxicillin", "Doxycycline", "Cefalexin", 
      "Clavulanic Acid", "Chloramphenicol", "Itraconazole", "Ivermectin", "Amlodipine", "Propranolol",
      "Clonidine", "Enoxaparin Sodium", "Sildenafil", "Tadalafil", "Finasteride", "Dutasteride",
      "Spironolactone", "Cyproterone Acetate", "Bicalutamide", "Estradiol", "Estradiol Enanthate",
      "Estradiol Hemihydrate", "Estradiol Undecylate", "Estradiol Valerate", "Progesterone", "Triptorelin",
      "Emtricitabine", "Tenofovir", "Raltegravir", "Insulin", "Sumatriptan", "Donepezil", "Melatonin",
      "Metoprolol", "Mysterypill"
    ].freeze,
    
    "Supplements" => [
      "Creatine", "Arginine", "Citrulline", "Tyrosine", "Tryptophan", "5-HTP", "Theanine", "EGCG",
      "NAC", "Na-R-ALA", "Vitamin C", "Quercetin", "Lactase", "Sodium Bicarbonate", "Sulbutiamine"
    ].freeze,
    
    "Botanicals" => [
      "Kratom", "Mitragynine", "7-OH-MIT", "Kanna", "Kava", "Salvia Divinorum", "Ipomea Tricolor"
    ].freeze,
    
    "Inhalants" => [
      "Nitrous Oxide", "Isobutyl Nitrite"
    ].freeze,
    
    "Research Chemicals" => [
      "a-D2PV", "MDPHP", "MDPiHP", "4F-3Me-a-PHP", "3F-PVP", "4C-PVP", "MF-PVP", "5-DBFPV",
      "4B-MAR", "6-APB", "5-MAPB", "2-methyl-a-PiHP", "3-CPM", "4-ME-TMP", "Mebicar", "Fabomotizole",
      "Propylhexedrine", "Levomethamphetamine", "N,N-Dimethylphenethylamine", "Dimethocaine", "Tianeptine"
    ].freeze,
    
    "Other" => [
      "Comirnaty", "Propofol", "Levobupivacaine", "Naloxone", "Buspirone", "Xylometazoline"
    ].freeze
  }.freeze

  def self.categorize_substance(substance)
    SUBSTANCE_CATEGORIES.each do |category, substances|
      return category if substances.include?(substance)
    end
    "Other"
  end

  def self.get_categories
    SUBSTANCE_CATEGORIES.keys
  end

  def self.get_substances_in_category(category)
    SUBSTANCE_CATEGORIES[category] || []
  end
end