#!/usr/bin/env ruby

require 'dbi'
require '../../basicrdf'
require '../squish'
require 'soap/standaloneServer'
#require 'soap/XMLSchemaDatatypes1999'
DBI_DRIVER = 'DBI:Pg:test1'
DBI_USER = 'danbri'
DBI_PASS=''

class App < SOAP::StandaloneServer
  def initialize( *arg )
    super( *arg )
  end

  def methodDef
    addMethod(self, 'squish', 'querystring', 'querylanguage' ,'datasrc')
  end

  def methodDef
    addMethod(self, 'squish', 'querystring', 'querylanguage' )
  end

   def squish ( querystring, querylanguage )
    self.squish(quertstring, querylanguage, 'default')
  end

  def squish ( querystring, querylanguage, datasrc='default' )

     # next bit should be conditional on rdfauthor  as client
    querystring.gsub!(/\s+WHERE/,", WHERE ") #baaad! fix the damn parser!
    querystring = querystring + "  USING dc for http://purl.org/dc/elements/1.1/ "

    total = ResultSet.new
    query = SquishQuery.new.parseFromText querystring
    service = DBIDataService.new('DBI:Pg:test1','danbri','')
    # service.defrag 
    # service.addAllSuperProperties
    results=ResultSet.new



    puts "Query: squish: #{querystring} sql: #{query.toSQLQuery} "

    DBI.connect( DBI_DRIVER, DBI_USER, DBI_PASS) do | dbh |
      # puts "Connected!..."
      dbh.select_all( query.toSQLQuery  ) do | row |
        # puts "Doing storing query..."
        total.push ResultRow.new(row.to_h.clone)
      end
    end
    ret=[]
    total.each do |row|
      ret.push row.values
      row.values.each_key do |field| puts "\t#{field}: #{row.values[field]} \n" end
      puts "\n\n"
    end
    puts "results are: #{ret.inspect} \n\n\n"
    return ret
  end
end

def getWireDumpLogFile
  logFilename = File.basename( $0 ) + '.log'
   f = File.open( logFilename, 'w' )
   f << "File: #{ logFilename } - rdf query server logs.\n"
   f << "Date: #{ Time.now }\n\n"
end
 
    
SquishProtocolNS="http://rdfweb.org/RDF/RDFWeb/SOAPDemo"
server = App.new( 'SOAPDemo', SquishProtocolNS, '0.0.0.0', 8082 )
server.setLog( '_rdfq.log', 0,0 )
server.start


