#! /usr/bin/ruby

# PROGRAM SMS2
# Version fuer das faible-Projekt
# Version: 20.5.2024
# Autor: Arno Pasternak
# Das Programm unterliegt der GPL, Version 3

# ==========================================

class SatzKlasse
#  attr_accessor :satz

  def initialize
    @satz = "Dies ist ein neuer Satz"
#    puts @satz
  end

  def einlesen
  print "Bitte Satz eingeben:   "
  @satz = gets.chomp
  puts @satz
  end

  def ausgeben
    puts @satz
  end


def verschluesseln(codewort)
  buchstabe = ""
  codebuchstabe = ""
  asciizahl = 0
  codeasciizahl = 0
  codestelle = 0
  verschluesselter_satz = ""
  stelle = 0
  codestelle = 0
  while stelle < @satz.length do
    buchstabe = @satz[stelle]
    codebuchstabe = codewort[codestelle]
    asciizahl = buchstabe.ord
    codeasciizahl = codebuchstabe.ord
    asciizahl = asciizahl + codeasciizahl - 64
    buchstabe = asciizahl.chr
    verschluesselter_satz = verschluesselter_satz + buchstabe
    stelle = stelle + 1
    codestelle = codestelle + 1
    if codestelle == codewort.length then
      codestelle = 0
    end
  end
  @satz = verschluesselter_satz
end

def entschluesseln(codewort)
  buchstabe = ""
  codebuchstabe = ""
  asciizahl = 0
  codeasciizahl = 0
  codestelle = 0
  entschluesselter_satz = ""
  stelle = 0
  while stelle < @satz.length do
    buchstabe = @satz[stelle]
    codebuchstabe = codewort[codestelle]
    asciizahl = buchstabe.ord
    codeasciizahl = codebuchstabe.ord
    asciizahl = asciizahl - codeasciizahl + 64
    buchstabe = asciizahl.chr
    entschluesselter_satz = entschluesselter_satz + buchstabe
    stelle = stelle + 1
    codestelle = codestelle + 1
    if codestelle == codewort.length then
      codestelle = 0
    end
  end
  @satz = entschluesselter_satz
end


def senden(dateiname)
  datei = File.new(dateiname, "w")
  datei.write(@satz)
  datei.close()
end


def holen(dateiname)
#  dateiabfrage = File.new(dateiname)
#  if !dateiabfrage.exists?
  if !File.exist?(dateiname)
    @satz = "SMS nicht vorhanden"
  else
    datei = File.new(dateiname)
    @satz = datei.readline
    datei.close()
  end
end

end
# Ende Satzklasse


# =========================================================

# BEGINN des Programms

puts ""
puts "=============================================================="
puts "         SMS Programm mit Vigenere-Verschlüsselung"
puts "=============================================================="
puts "=============================================================="
puts ""
puts ""


sms = nil
codewort = nil
teilnehmer = nil
absender = nil
empfaenger = nil
wahl = nil

codewort = 0.chr
puts ""
print "Bitte gib Deinen Namen an:   "
teilnehmer = gets.chomp
#teilnehmer = gets.chomp("Bitte gib Deinen Namen an:   ")
sms = SatzKlasse.new
wahl = ""

while wahl != "Q"
  puts ""
  puts "=============================================================="
  puts "E: Einlesen         **        A: Ausgeben"
  puts "S: Senden           **        H: Holen"
  puts "V: Verschlüsseln    **        D: Entschlüsseln"
  puts "Z: Zeigen alle SMS  **        C: Codewort eingeben"
  puts "Q: QUIT"
  puts ""
  print "Bitte wählen:   "
  wahl = gets.chomp
#  wahl = gets.chomp("Bitte wählen:   ")
  wahl.upcase!
  puts ""
  puts "--------------------------------------------------------------"

if wahl == 'Z'
  puts `./verzeichnis.sh`
end

if wahl == 'C'
  print "Bitte Codewort eingeben:   "
  codewort = $stdin.gets.chomp
end

if wahl == 'E'
  sms.einlesen
end

if wahl == 'A'
  sms.ausgeben
end

if wahl == 'S'
  print "Bitte Empfänger eingeben:   "
  empfaenger = $stdin.gets.chomp
  sms.senden("#{empfaenger}_#{teilnehmer}.sms")
  puts "Die SMS wurde versandt."
end

if wahl == 'H'
  print "Bitte Absender eingeben:   "
#  absender = $stdin.gets.chomp
  absender = gets.chomp
  sms.holen("#{teilnehmer}_#{absender}.sms")
  puts "Folgende SMS wurde erhalten:"
  sms.ausgeben
end

if wahl == 'V'
  sms.verschluesseln(codewort)
  print "Verschlüsselt:   "
  sms.ausgeben
end

if wahl == 'D'
  sms.entschluesseln(codewort)
  print "Entschlüsselt:   "
  sms.ausgeben
end

end

# ENDE des Programmes
