#!/usr/bin/lua
-------------------------------------------------------------------------------
-- Copyright (c) 2013 Sierra Wireless and others.
-- All rights reserved. This program and the accompanying materials
-- are made available under the terms of the Eclipse Public License v1.0
-- which accompanies this distribution, and is available at
-- http://www.eclipse.org/legal/epl-v10.html
--
-- Contributors:
--     Sierra Wireless - initial API and implementation
-------------------------------------------------------------------------------

-- Fetch libraries form current plugin
package.path = './?.lua;../lib/?.lua;../../../libraries/metalua/?.lua;../../../libraries/modelsbuilder/?.lua;../../../libraries/luaformatter/?.lua;'
package.mpath = '../../../libraries/metalua/?.mlua;../../../libraries/modelsbuilder/?.mlua;'
require 'metalua.loader'

--
-- Generate serialized lua API models files next to given file.
--
local apimodelbuilder = require 'models.apimodelbuilder'
local internalmodelbuilder = require 'models.internalmodelbuilder'
local modeltransformations = require 'modeltransformations'
local tablecompare = require 'tablecompare'

if #arg < 1 then
	print 'No file to serialize.'
	return
end
for k = 1, #arg do

	-- Load source to serialize
	local filename = arg[k]
	local status, error = modeltransformations.codetoserialisedmodel(
		filename,
		'serialized',
		function (ast)
			--
			-- Generate API model
			--
			local apimodel, comment2apiobj = apimodelbuilder.createmoduleapi(ast)
		
			--
			-- Generate internal model
			--
			local internalmodel = internalmodelbuilder.createinternalcontent(ast,apimodel,comment2apiobj, 'modulename')
		
			--
			-- create table with the two models
			-- 
			local luasourceroot = {}
			luasourceroot.fileapi=apimodel
			luasourceroot.internalcontent=internalmodel
			
			return luasourceroot
		end
	)
	if not status then
		print( error )
	end
end
