#!/usr/bin/env ruby
#
# written 2008/07/31 by natror
# Skrypt do zamiany sensów wg nw. plików 


require 'ftools' # for File.copy etc.


  __FILE__ =~ /\/([^\/]+)$/
$myname=$1
$mydirname= File.dirname(__FILE__)

## require "#{mydirname}/script/console"


$sensy_mod = 'mod-org-senses.txt'
$sensy_del = 'del-new-senses.txt'

$elazid = Uzytkownik.find_by_login( 'elaz').uzytkownik_id
# id Eli jako zarządcy, użyjemy przy komentarzu.


def zmieniaj( filename )
  File.open( filename ) {|f| 
    f.each {|line| 
      line =  line.chomp.split # plik ma 5 lub 6 kolumn rozdzielanych tabulatorami.
      # poz. 0 — lemat, poz.1 — sens_ozn obecne, poz.4 — sens_ozn 2B

      slstary = SensyLeksemu.find(:first, :include =>[:sensy, :leksem],
                                  :conditions => ["leksem.lemat= ? and sensy.sens_ozn = ?" , 
                                                  line[0], line[1] ])
      if slstary
        puts "#{slstary.leksem.lemat} #{slstary.sensy.sens_ozn}"

        if line[4] == '***' or line[4] == '???'
          puts "#{slstary.sensy_leksemu_id} #{line[4]}"
          zdania = []
          slstary.sens_anot.each{ |sa|
            zdania << sa.token.zdanie
            sa.destroy
          }
          zdania.uniq!
          zdania.each{ |zd|
            zt = zd.zdania_transzy
            zt0 = zt[0]
            zd.komentarz.create(
                                    :uzytkownik_id => $elazid,
                                    :zdania_transzy_id => zt0.zdania_transzy_id,
                                    :tresc => "Proszę się przyjrzeć wyrazowi #{line[0]}"
                                    )
            zt.each{|z|
              z.status = ZdaniaTranszy::STATI[:po_konfrontacji1]
              z.save}
          }
          
          if slstary.nowy? or (filename == $sensy_del ) # and not slstary.sens_anot( :refresh )
            puts "niszczę #{slstary.sensy_leksemu_id}"
            slstary.destroy 
          end
            
        else # mamy sens_ozn
          sensid2b = Sensy.find_by_sens_ozn( line[4] )
          slnowy = SensyLeksemu.find(:first, :include => :leksem,
                                     :conditions => [ "leksem.lemat=? and sensy_id=?", 
                                                    line[0] , sensid2b] )
          if slnowy
            puts "#{slstary.sensy_leksemu_id} +=> #{slnowy.sensy_leksemu_id}"
            # jest już laki sens leksemu, to wówczas łączymy.
            slnowy.sens_anot_count += slstary.sens_anot_count
            #  slnowy.sens_zweryf_count zostawiamy, skoro zdania z slstarym zyskują status do konfrontacji.
            slnowy.nowy = ( filename == $sensy_del ) # del ozn. jako nowe, mod jako stare
            slnowy.save
            slstary.sens_anot.each{ |sa|
              sa.sensy_leksemu_id = slnowy.sensy_leksemu_id
              sa.save}
            slstary.destroy
          else# takiego sensu_leksemu jeszcześmy nie mieli
            puts "#{slstary.sensy_leksemu_id} +=> #{slstary.sensy_leksemu_id}"
            slstary.sensy_id = sensid2b
            slstary.nowy = ( filename == $sensy_del )
            slstary.save
          end# of if slnowy
        end# of if line =='***' etc.
      end# of if slstary
      }}

end # of zmieniaj


zmieniaj( $sensy_mod )
zmieniaj( $sensy_del )




# about ranges: file:///usr/share/doc/rubybook/html/tut_stdtypes.html

# very instructive: /usr/lib/ruby/1.8/jcode.rb

### Local Variables:
### coding: utf-8
### End:
