# coding: utf-8
include REXML

class SgoController < ApplicationController

  before_filter :check_access
  
  cattr_accessor :access_key
  
  self.access_key = 'ONjCHOcyX7TggbXkz3ask7P7aSUo7brivhrImhGa'

  def index
    session[:sgo_publications_ids] ||= []
    
    unless params[:pid].blank?
      params[:pid].split(' ').each do |pid|
        session[:sgo_publications_ids] << pid.to_i
      end
    end
    session[:sgo_publications_ids].uniq!
    
    session[:sgo_publications_prices] ||= {}
    
    @publications  = Publication.find(:all, :include => :publication_versions, :conditions => { :id => session[:sgo_publications_ids] }) unless session[:sgo_publications_ids].blank?

    respond_to do |format|
      format.html
      format.xml do
        
        require 'rexml/document'
        
        dtd     = (1 == params[:download].to_i) ? 'Katalog.dtd' : '/extras/sgo.dtd'
        xsl     = (1 == params[:download].to_i) ? 'Katalog.xsl' : '/extras/sgo.xsl'
        d       = Document.new('<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="' + xsl + '"?><!DOCTYPE ROOT SYSTEM "' + dtd + '">')
        el_root = d.add_element 'ROOT'

          el_title = el_root.add_element 'TITLE'
          el_title.text = 'Katalog'
          
          el_subtitle  = el_root.add_element 'SUBTITLE'
          el_subtitle.text = 'Poradniki'
          
          el_editorial = el_root.add_element 'EDITORIAL'
            el_date = el_editorial.add_element 'DATE'
            el_date.text = Date.today.strftime('%d.%m.%Y')
            
            el_institution = el_editorial.add_element 'INSTITUTION'
              el_mark = el_institution.add_element 'MARK'
              el_mark.text = 'Dane kontaktowe'

              el_name = el_institution.add_element 'NAME'
              el_name.text = 'Złote Myśli Sp. z o.o.'

              el_adress = el_institution.add_element 'ADRESS'
                el_street = el_adress.add_element 'STREET'
                el_street.text = 'ul. Daszyńskiego'
                
                el_no_house = el_adress.add_element 'NO_HOUSE'
                el_no_house.text = '5'
                
                el_code = el_adress.add_element 'CODE'
                el_code.text = '44-100'
                
                el_city = el_adress.add_element 'CITY'
                el_city.text = 'Gliwice'

              el_tel = el_institution.add_element 'TEL'
              el_tel.text = 'tel. (032) 2304691'

              el_fax = el_institution.add_element 'FAX'
              el_fax.text = 'fax. (032) 4446714'

              el_www = el_institution.add_element 'WWW'
              el_www.text = 'www.zlotemysli.pl'
        
            el_info = el_editorial.add_element 'INFO'
              el_info_desc = el_info.add_element 'INFO_DESCR'
                el_info_desc_title = el_info_desc.add_element 'TITLE'
                el_info_desc_title.text = 'Wieczna gwarancja'
                
                el_info_desc_subtitle = el_info_desc.add_element 'SUBTITLE'
                el_info_desc_subtitle.text = '100% satysfakcji'
                
                el_info_desc_lid = el_info_desc.add_element 'LID'
                el_info_desc_lid.text = 'po prostu zwracamy pieniądze bez gadania'
                
              el_info_body = el_info.add_element 'INFO_BODY'
                el_info_body_paragraph_1 = el_info_body.add_element 'PARAGRAPH'
                el_info_body_paragraph_1.text = 'Jesteśmy tak pewni jakości i wartości wydawanych przez nas publikacji elektronicznych, że zdecydowaliśmy się wprowadzić unikalną gwarancję, która ma zapewnić Twoje maksymalne zadowolenie z naszej oferty.'

                el_info_body_paragraph_2 = el_info_body.add_element 'PARAGRAPH'
                el_info_body_paragraph_2.text = 'Gwarancja spełnia swoją rolę w 100%. Mimo, iż niektórzy odradzali nam takie rozwiązanie mówiąc o tym, że ludzie będą nadużywać takiej gwarancji, my postawiliśmy na swoim i jesteśmy zadowoleni, a przede wszystkim nasi Klienci są zadowoleni, że mogą szybko i bezpiecznie dokonywać zakupów.'

                el_info_body_paragraph_3 = el_info_body.add_element 'PARAGRAPH'
                el_info_body_paragraph_3.text = 'Jeśli w dowolnym momencie po zakupie ebooka stwierdzisz, że nie spełnił on Twoich oczekiwań wystarczy, że:'

                el_info_body_line_1 = el_info_body.add_element 'LINE'
                el_info_body_line_1.text = 'Wyślesz do nas maila na adres kontakt@zlotemysli.pl podając numer zamówienia i prośbę o zwrot pieniędzy.'

                el_info_body_line_2 = el_info_body.add_element 'LINE'
                el_info_body_line_2.text = 'Odeślemy Ci specjalny formularz zwrotu ebooka, który wypełnisz swoimi danymi i prześlesz do nas.'

                el_info_body_line_3 = el_info_body.add_element 'LINE'
                el_info_body_line_3.text = 'Zwrócimy Ci przelewem na konto 100% zapłaconej kwoty.'

                el_info_body_paragraph_4 = el_info_body.add_element 'PARAGRAPH'
                el_info_body_paragraph_4.text = 'Otrzymasz zatem zwrot wszystkich pieniędzy i nie będziesz musiał odpowiadać na żadne pytania o powody zwrotu, jeśli nie będziesz chciał.'

        @publications.each do |p|
          
          el_book = el_root.add_element 'BOOK'
            el_book_descr = el_book.add_element 'BOOK_DESCR'
              el_book_descr_image = el_book_descr.add_element 'IMAGE', { 'NAME' => p.publication_image.source }
              el_book_authors = el_book_descr.add_element 'AUTHORS'
                el_book_authors_author = el_book_authors.add_element 'AUTHOR'
                  el_book_authors_author_fname  = el_book_authors_author.add_element 'FIRST_NAME'
                  el_book_authors_author_fname.text = Iconv.iconv('utf-8', 'latin2', p.author.imie).join.to_s

                  el_book_authors_author_lname  = el_book_authors_author.add_element 'LAST_NAME'
                  el_book_authors_author_lname.text = Iconv.iconv('utf-8', 'latin2', p.author.nazwisko).join.to_s

              el_book_title = el_book_descr.add_element 'TITLE'
              el_book_title.text = Iconv.iconv('utf-8', 'latin2', p.title).join.to_s

              el_book_subtitle = el_book_descr.add_element 'SUBTITLE'
              el_book_subtitle.text = Iconv.iconv('utf-8', 'latin2', p.short).join.to_s

              el_book_descr_descr = el_book_descr.add_element 'DESCR'
              el_book_descr_descr.text = Iconv.iconv('utf-8', 'latin2', p.short).join.to_s

              el_book_link = el_book_descr.add_element 'LINK', { 'www' => p.link }
              el_book_type = el_book_descr.add_element 'TYPE'
              
              p.publication_versions.each do |v|
                next unless [0, 2, 4, 64].include? v.version
                
                el_version = el_book_type.add_element v.xml_type
                  el_version_title = el_version.add_element 'TITLE'
                  el_version_title.text = v.xml_type_title
                  
                  el_version_publish_info = el_version.add_element 'PUBLISH_INFO'
                    el_version_publish_info_isbn = el_version_publish_info.add_element 'ISBN'
                    el_version_publish_info_isbn.text = "ISBN: #{v.isbn}"

                    el_version_publish_info_volume = el_version_publish_info.add_element 'VOLUME'
                    el_version_publish_info_volume.text = v.volume
                    
                    if [4, 64].include? v.version
                      el_version_publish_info_lector = el_version_publish_info.add_element 'LECTOR'
                      el_version_publish_info_lector.text = "lektor: #{Iconv.iconv('utf-8', 'latin2', v.lektor).join.to_s}"
                    end

                    el_version_publish_info_price = el_version_publish_info.add_element 'PRICE'
                      el_version_publish_info_price_old = el_version_publish_info_price.add_element 'OLD'
                      el_version_publish_info_price_old.text = "%.2f zł" % v.price
                      
                      el_version_publish_info_price_new = el_version_publish_info_price.add_element 'NEW'
                      el_version_publish_info_price_new.text = "%.2f zł" % ((session[:sgo_publications_prices][p.id].blank? || session[:sgo_publications_prices][p.id][v.id].blank?) ? v.price : session[:sgo_publications_prices][p.id][v.id])
              end
        end

        if params[:download]
          send_xml_data d.to_s, :filename => 'zm_sgo.xml'
        else
          render :text => d.to_s, :content_type => Mime::XML
        end
      end
    end
  end
  
  def discount_price
    @discount     = 0
    tmp, pid, vid = params[:input_id].split('_')
    
    session[:sgo_publications_prices] ||= {}

    if session[:sgo_publications_ids].include? pid.to_i
      session[:sgo_publications_prices][pid.to_i] ||= {}
      session[:sgo_publications_prices][pid.to_i].merge! ({ vid.to_i => params[:input_value].gsub(/,/, '.').to_f })

      @discount = (((session[:sgo_publications_prices][pid.to_i][vid.to_i] / PublicationVersion.find(vid).price) * 100.0) - 100.0).abs
    end
  end

  def discount_percent
    @discount     = params[:input_value].gsub(/,/, '.').to_f
    tmp, pid, vid = params[:input_id].split('_')
    
    session[:sgo_publications_prices] ||= {}

    if session[:sgo_publications_ids].include? pid.to_i
      session[:sgo_publications_prices][pid.to_i] ||= {}
      session[:sgo_publications_prices][pid.to_i].merge! ({ vid.to_i => (PublicationVersion.find(vid).price * ((100.0 - @discount) / 100.0)) })

      @price = session[:sgo_publications_prices][pid.to_i][vid.to_i]
    end
  end

  def clear
    [:sgo_publications_ids, :sgo_publications_prices].each do |idx|
      session[idx] = nil
    end
    
    return redirect_to :action => 'index'
  end

  def remove
    ids = session[:sgo_publications_ids]

    session[:sgo_publications_prices][params[:id].to_i] = {}
    session[:sgo_publications_ids]                      = nil
    session[:sgo_publications_ids]                      = []
    
    ids.each do |id|
      session[:sgo_publications_ids] << id unless id == params[:id].to_i
    end
    
    return redirect_to :action => 'index'
  end
  
  private
    def check_access
      if session[:sgo_access_key].blank?
        session[:sgo_access_key] = params[:access_key] if self.access_key == params[:access_key]
      end
      
      unless self.access_key == session[:sgo_access_key]
        render :text => 'nieautoryzowany dostęp'
      end
      
      redirect_to :action => 'index' unless params[:access_key].blank?
    end
    
    def send_xml_data(data, options = {}) #:doc:
      logger.info "Sending data #{options[:filename]}" if logger
      send_file_headers! options.merge(:length => data.bytesize)
      @performed_render = false
      render :status => options[:status], :text => data
    end
    
end
