class Geometry {
  constructor(molecule, comment) {
    this.molecule = molecule
    this.comment = comment
  }

  toXYZ() {
    var lines =[]
    lines.push(this.molecule.atoms.length)
    lines.push(this.comment)
    for (const a of this.molecule.atoms) {
      var line = a.label.padEnd(4, ' ')
      line += a.x.toFixed(8).padStart(11,' ')
      line += a.y.toFixed(8).padStart(22,` `)
      line += a.z.toFixed(8).padStart(22,` `)
      lines.push(line)
    }
    return lines.join("\n")
   }
  
  static async loadXYZAsync(file) {
    switch (trueTypeOf(file)) {
      case String.name:
        file = getFullDataPath("structures"+file)
        var str = getTextFromFileUrl(file)
        break;
      case File.name:
        var str = await getTextFromUploadedFileAsync(file)
        break
    }
    var xyz = this.loadXYZString(str);
    for (var geom of xyz){
      geom.sourceFile = new websiteFile(file)
    }
    return xyz
  }
  static loadXYZString(text) {
    var lines = text.split("\n")
    var indexes = lines.findAllIndexes((line) => {
      return line.match(/^\d+\s*$/)
    })
    indexes.push(lines.length)
    var geoms = []
    for (let i = 0; i < indexes.length - 1; i++) {
      const mollines = lines.slice(indexes[i], indexes[i + 1])
      const comment = mollines[1]
      const molecule = ChemDoodle.readXYZ(mollines.join("\n"))
      geoms.push(new Geometry(molecule, comment))
    }
    return geoms
  }
}
