#!/usr/bin/env ruby
# encoding: EUC-JP
# $KCODE = 'u'
require 'nkf'

if ARGV.length == 1
  outputname = ARGV[0]
  text = STDIN.read
elsif ARGV.length == 2
  outputname = ARGV[0]
  text = File.open(ARGV[1]).read.chomp
else
  puts "Usage 1: echo '12345' | script/text2wav outputname"
  puts "Usage 2: script/text2wav outputname input.txt"
  exit
end

outputdir = File.join(Dir.pwd, outputname)
speaker = "Female01"

text = NKF.nkf('-w', text)
gtalk_bin = "/usr/local/galatea-dialog/bin/gtalk" # for utf8
# gtalk_bin = "/usr/local/galatea-engine/SSM/gtalk/gtalk" # for euc-jp

####################
# based on script/runner
####################
$runner_dir = File.expand_path(File.join(File.dirname(__FILE__), '..'))
$skel_dir = File.expand_path(File.join(File.dirname(__FILE__), '../skel'))
$tmp_dir = File.expand_path(File.join(File.dirname(__FILE__), '../tmp'))
$generator_dir = "/usr/local/galatea-dialog"
[ $runner_dir, $generator_dir ].each do |d|
  f2 = File.join(d, 'lib', 'galatea_runner.rb')
  if File.exist?(f2)
    $library_dir = File.join(d , 'lib')
    %w[ helper.rb yaml_reader.rb config_maker.rb galatea_config_maker.rb ].each do |f|
      require File.join($library_dir, f)
    end
    # puts "using " + $library_dir
    break
  end
end
####################
# based on galatea_runner.rb
####################
dm_conf_options = []
galatea_lang = 'ja'
dry_run = false
preprocess_only = false
config_yml_array = []
# puts "[runner_dir] " + $runner_dir
ar = [ File.join($runner_dir, 'runner.yml'), File.join($runner_dir, 'config', 'runner.yml') ]
if $generator_dir
  ar << File.join($generator_dir, 'runner.yml')
end
ar << "/usr/local/galatea-dialog/runner.yml"
# puts "[config candidate] " + ar.join(' ')
ar.each do |f|
  if File.exist?(f)
    config_yml_array << f
  end
end
# puts "[config] " + config_yml_array.join(' ')
m = GalateaConfigMaker.new(config_yml_array)
m.verbose = true
m.set_dm_options dm_conf_options, [] # m.set_dm_options dm_conf_options, ARGV
m.set_lang galatea_lang
m.mkdir_tmppath
m.preprocess_only = preprocess_only
%w[ julius.conf gdm.conf fsm.conf ssm.conf chasenrc-euc-jp gtalk-euc-jp.dic am.conf am_mcl.conf ].each do |f|
  m.make f
end
# system m.runner_cmd
####################
# based on gtalk/RUN (perl script)
####################
require 'open3'
ssmconf = $tmp_dir + '/ssm.conf'
cmd = "cd /usr/local/galatea-engine/SSM/gtalk; #{gtalk_bin} -C #{ssmconf}"
puts text
puts cmd
FileUtils.mkdir_p outputname
Open3.popen3("#{cmd} >&2") do |stdin, stdout, stderr|
  stdin.puts "set Log = #{outputdir}/#{outputname}.log.eucjp"
  stdin.puts "set Log.conf = YES"
  stdin.puts "set Log.text = YES"
  stdin.puts "set Log.arrangedText = YES"
  stdin.puts "set Log.chasen = YES"
  stdin.puts "set Log.tag = YES"
  stdin.puts "set Log.phoneme = YES"
  stdin.puts "set Log.mora = YES"
  stdin.puts "set Log.morph = YES"
  stdin.puts "set Log.aphrase = YES"
  stdin.puts "set Log.breath = YES"
  stdin.puts "set Log.sentence = YES"
  stdin.puts "prop Text.text = AutoOutput"
  stdin.puts "prop Text.pho = AutoOutput"
  stdin.puts "prop Text.dur = AutoOutput"
  stdin.puts "prop Speak.text = AutoOutput"
  stdin.puts "prop Speak.utt = AutoOutput"
  stdin.puts "prop Speak.len = AutoOutput"
  stdin.puts "prop Speak.stat = AutoOutput"
  stdin.puts "set Speaker = #{speaker}"
  stdin.puts "set Text = #{text}"
  stdin.puts "set SaveWAV = #{outputdir}/#{outputname}.wav"
  stdin.puts "set SavePros = #{outputdir}/#{outputname}.pros.eucjp"
  stdin.puts "set Run = EXIT"
  stdin.close_write
  File.open("#{outputdir}/#{outputname}.runner_log", "w") do |rlog|
    rlog.puts "stdout:\n" + stdout.read
    rlog.puts "stderr:\n" + stderr.read
  end
end
system "nkf -Ew #{outputdir}/#{outputname}.log.eucjp > #{outputdir}/#{outputname}.log"
system "nkf -Ew #{outputdir}/#{outputname}.pros.eucjp > #{outputdir}/#{outputname}.pros"
system "mv #{outputdir}/#{outputname}.wav.info #{outputdir}/#{outputname}.wav.info.eucjp"
system "nkf -Ew #{outputdir}/#{outputname}.wav.info.eucjp > #{outputdir}/#{outputname}.wav.info"

