///|
/// Bio.Crystal demo: small-molecule crystallographic CIF parsing.
///
/// Demonstrates unit-cell geometry, space-group lookup, coordinate
/// transformations, CIF parsing, and crystal-structure analysis.
fn main {
  println("=== Bio.Crystal Demo ===\n")

  // 1. Unit cell.
  println("1. Unit Cell:")
  let cell = @bio.UnitCell::new(
    a=5.418,
    b=5.418,
    c=7.543,
    alpha=90.0,
    beta=90.0,
    gamma=120.0,
  )
  println("   a=\{cell.a}, b=\{cell.b}, c=\{cell.c}")
  println("   alpha=\{cell.alpha}, beta=\{cell.beta}, gamma=\{cell.gamma}")
  let vol = @bio.unit_cell_volume(cell)
  println("   Volume: \{vol} A^3")

  // 2. Crystal density.
  println("\n2. Crystal Density:")
  let rho = @bio.crystal_density(cell, 2, 78.11)
  println("   Z=2, MW=78.11 g/mol")
  println("   Density: \{rho} g/cm^3")

  // 3. Space group lookup.
  println("\n3. Space Group Lookup:")
  let sg14 = @bio.lookup_space_group(14)
  println("   #14: \{sg14.symbol}")
  let sg19 = @bio.lookup_space_group(19)
  println("   #19: \{sg19.symbol}")
  let sg225 = @bio.lookup_space_group(225)
  println("   #225: \{sg225.symbol}")

  // 4. Coordinate transformations.
  println("\n4. Coordinate Transformations:")
  let (x, y, z) = @bio.fractional_to_cartesian(cell, 0.5, 0.5, 0.5)
  println("   Fractional (0.5, 0.5, 0.5) -> Cartesian (\{x}, \{y}, \{z})")
  let (xf, yf, zf) = @bio.cartesian_to_fractional(cell, x, y, z)
  println("   Cartesian back to Fractional (\{xf}, \{yf}, \{zf})")

  // 5. Parse a CIF file.
  println("\n5. Parse CIF File:")
  let cif_text = @bio.crystal_sample_cif()
  let blocks = @bio.parse_cif(cif_text)
  println("   Parsed \{blocks.length()} block(s)")
  println("   Block name: \{blocks[0].name}")

  // 6. Convert CIF block to CrystalStructure.
  println("\n6. Convert to CrystalStructure:")
  let s = @bio.cif_block_to_crystal(blocks[0])
  println("   Name: \{s.name}")
  println("   Atoms: \{s.atoms.length()}")
  println("   Z = \{s.z}")
  println("   MW = \{s.molecular_weight} g/mol")
  println("   Space group: \{s.space_group.symbol} (#\{s.space_group.number})")
  println("   Volume: \{@bio.unit_cell_volume(s.cell)} A^3")
  let density = @bio.crystal_density(s.cell, s.z, s.molecular_weight)
  println("   Density: \{density} g/cm^3")

  // 7. Atoms.
  println("\n7. Atom Sites:")
  println("   label\telement\tx\ty\tz")
  for i in 0..