package impt

import (
	"bytes"
	"text/template"

	"github.com/linlexing/dbx/schema"
)

type fieldRender struct {
	*schema.Column
	fillTemplate *template.Template //值模板，为nil，则说明是直接取数据
	dataIndex    int                //数据列序号，只有fillTemplate为nil时才起作用
}
type render struct {
	cols []*fieldRender
	args map[string]interface{}
}

//renderField render一个字段
func (f *fieldRender) renderField(data []string, args map[string]interface{}) (rev interface{}, err error) {
	if f.fillTemplate != nil {
		out := bytes.NewBufferString("")
		if err = f.fillTemplate.Execute(out, args); err != nil {
			return
		}
		rev = f.Type.ParseString(out.String())
	} else {
		rev = f.Type.ParseString(data[f.dataIndex])
	}
	return
}
func (r *render) renderLine(data []string) ([]interface{}, error) {
	rev := []interface{}{}
	for _, col := range r.cols {
		val, err := col.renderField(data, r.args)
		if err != nil {
			return nil, err
		}
		rev = append(rev, val)
	}
	return rev, nil
}
func (r *render) ColumnNames() []string {
	rev := []string{}
	for _, one := range r.cols {
		rev = append(rev, one.Name)
	}
	return rev
}
