package omp

import (
	"bytes"
	"fmt"
)

type OMP struct {
	Header Header
	Data   Data
}

func (s OMP) Build() []byte {
	buff := bytes.NewBufferString("")
	buff.Write(s.Header.GetData())
	buff.Write(s.Data.GetIntro())
	buff.Write(s.Data.GetLibFor())
	buff.Write(s.Data.GetOMCurrentPersistent())
	return buff.Bytes()
}

type Data struct {
	Intro  []byte
	LibFor []byte
	CurrentPersistent []byte
}

func (s *Data) GetIntro() []byte {
	return s.Intro
}

func (s *Data) SetIntro() {
	s.Intro = []byte("(in-package :om)")
}

func (s *Data) GetLibFor() []byte {
	return s.LibFor
}

func (s *Data) SetLibFor() {
	s.LibFor = []byte("(load-lib-for (quote nil))")
}

func (s *Data) SetOMCurrentPersistent(kind string, name string) {
	s.CurrentPersistent = []byte(fmt.Sprintf("(setf *om-current-persistent* (%s \"%s\" (quote nil) (quote nil) nil 6.19))", kind, name))
}

func (s *Data) GetOMCurrentPersistent() []byte{
	return s.CurrentPersistent
} 
