#!usr/bin/env ruby
# -*- coding: utf-8 -*-

#このプログラムは、メモづくりを簡単に行えるプログラムがあればいいなと思い、作成した。
#このテーマにした理由は、自分の親がいつも出かけるときにメモを置いて行くのだが、時間がなくて書けなかったり、メモ帳がなかったりして書けないことがあったりしたため、そのような場合に、すぐに書けて、メモ帳代わりになるプログラムがあったら便利だろうなと思ったから。
#また、自分は一日の予定(to do)をよくホワイトボードに書いているのだが、置く場所がなく、じゃまだったりすることがあるので、パソコン内に保存しておけたら楽だと思った。
#だが、今まで、プログラムがずっと動いていないと、入力した内容が保持されないと思っていたので、他のプログラムを作る予定だった。でも、rubyではcsvファイルやtxtファイルの読み込みができるので、もしかしたら書き込みも可能なのかもしれないと考え、やってみたらできたので、これを使ってプログラムを作ってみることにした。

#実装したい機能
#・メモの記入
#・書いたメモの保存
#・箇条書きonとoffの切り替え
#・記入済みのメモの表示
#・to_doでの、リスト内の完了したことの消去
#・to_doで、やることが全て完了したときの、to_doの自動消去
#・メモの細かいデータの保存(書いた日付など)
#・メモがいつになったら表示される/消去されるなどの設定
#・不要になったメモの削除
#・複数のメモの作成
#・表示時、削除時での、メモが存在しない場合のメッセージ
#・メモの検索(年、月、日、内容など)

#結果...悩みを解決できるプログラムは作れたと思う。だが、これは必要最低限で、まだ普通のメモ帳と変わらないレベルまでしか作れていないので、普通のメモ帳よりこのプログラムが便利になるように、まだ実装できていない機能を実装したい。

#データの保存のやり方がわからなかった頃は、日記のプログラムを作る予定だった(というか作っていた)。だが、作っていくうちに、日記が書けるだけで、便利機能が少ないようなプログラムになりそうな気がしたので、メモのプログラムを作ることにした。変数名や配列名、プログラムの中身がこのプログラムと比べ物にならないくらいの状態になったまま放置されている。「diary.rb」

to_do = []
memo = []

while true
  puts "1.メモの作成\n2.メモを見る\n3.メモの削除\n4.終了\n"
  choice = gets.chomp
  if choice == "1"
    puts "メモの種類を選択してください。\n1.to doリスト作成\n2.ただのメモ"
    memo_kind = gets.chomp
    puts "次に、箇条書きをするかを入力してください。\n1.on\n2.off\n何も入力されなかった場合や、1・2以外の数字が入力された場合は箇条書きになりません。"
    itemization = gets.chomp
    if memo_kind == "1"   #to_doを選んだとき
      file_to_do = File.open('to_do.txt',"w+")  #to_do.txtを開く。なければ自動で作成。
      puts "内容を書き込んでください。終わる場合はendと入力してください。"
      while true
        if itemization == "1"
          print "・"
        end
        contents = gets.chomp
        if contents == "end"
          break
        else
          if itemization == "1"
            file_to_do.print "・"
          end
          file_to_do.printf("%s\n",contents)
          redo
        end
      end
      file_to_do.close
    elsif memo_kind == "2"   #メモを選んだとき
      puts "内容を書き込んでください。終わる場合はendと入力してください。"
      file_memo = File.open('memo.txt',"w+")
      while true
        if itemization == "1"
          print "・"
        end
        contents = gets.chomp
        if contents == "end"
          break
        else
          if itemization == "1"
            file_memo.print "・"
          end
          file_memo.printf("%s\n",contents)
        end
      end
      file_memo.close
    else
      puts "もう一度入力してください。"
      redo
    end
  elsif choice == "2"
    begin
      while true
        puts "どちらのメモを見ますか?\n1.to_do\n2.ただのメモ\n3.やめる"  #メモを見る
        see = gets.chomp
        if see == "1"
          puts "終了したものは消すことができます。\n消したいものの番号を入力してください。終わる場合はendと入力してください。"
          while true
            num = 1
            File.readlines("to_do.txt").each do |line|
              printf("%2d:",num)
              num += 1
              to_do << line.chomp
              puts line.chomp
            end
            if to_do.length == 0
              File.delete("to_do.txt")
              puts "to doの内容が全て終了したため、to doが削除されました。"
              break
            end
            finish = gets.chomp
            if finish == "end"
              break
            elsif finish.to_i > to_do.length || finish.to_i == 0
              puts "それは存在しません。"
              to_do = []
              redo
            else
              to_do.delete_at(finish.to_i - 1)
              file_to_do = File.open('to_do.txt',"w")
              file_to_do.puts to_do
              file_to_do.close
              to_do = []
              redo
            end
          end
          redo
        elsif see == "2"
          File.readlines("memo.txt").each do |line|
            memo << line.chomp
          end
          for i in memo
            puts i
          end  
        elsif see == "3"
          break
        else
          puts "もう一度入力してください。"
          redo
        end
      end
    rescue Errno::ENOENT   #メモが存在しなかった場合の例外処理
      puts "そのメモは存在しないか、すでに消された可能性があります。"
    end
  elsif choice == "3"
    while true
      begin
      puts "どちらのメモを削除しますか?\n1.to do\n2.ただのメモ\n3.やめる"
      delete = gets.chomp
      if delete == "1"
        File.delete("to_do.txt")
        puts "to doを削除しました。"
        redo
      elsif delete == "2"
        File.delete("memo.txt")
        puts "メモを削除しました。"
        redo
      elsif delete == "3"
        break
      else
        puts "もう一度入力してください。"
        redo
      end
      rescue Errno::ENOENT
        puts "そのメモは存在しないか、すでに消された可能性があります。"
      end
    end
  elsif choice == "4"
    break
  else
    puts "もう一度入力してください。"
  end
  redo
end
