package impt

import (
	"bytes"
	"dbweb/core"
	"encoding/csv"
	"fmt"
	"strings"
)

//ImportPath 指明临时存放的目录
const (
	ImportPath             = "imp_data"
	ImportFieldStyleNormal = "NORMAL"
	ImportFieldStyleMust   = "MUST"
	ImportFieldStyleFill   = "FILL"
	ImportFieldStyleSkip   = "SKIP"
)

//ImportParamField 单个字段设置
type ImportParamField struct {
	Name   string
	Style  string //NORMAL-正常导入字段，MUST-必须导入的字段，FILL-自动填充的字段，SKIP-忽略的字段
	Value  string
	Remark string
}
type importError struct {
	RowNo int64
	Data  []string
	Err   error
}

//ImportParam 是导入模块在工作元素设置中的参数
type ImportParam struct {
	DB     string
	Table  string
	Where  string
	Before string
	After  string
	Fields []*ImportParamField
}

//ModelImportElement 一个导入的工作元素
type ModelImportElement struct {
	core.ModelElementNoParam `yaml:",inline"`
	Params                   ImportParam `dbx:"STR"`
}

//ImportPostParam 是导入模块，用户界面上设置的参数
type ImportPostParam struct {
	Param struct {
		FirstHead   bool
		Charset     charset
		Format      format
		CustomSplit string
	}
	Fields []*struct {
		FieldName  string
		ColumnName string
		Value      string
	}
}

func (i *importError) Error() string {
	//return fmt.Sprintf("line %d :%#v %s", i.RowNo, i.Data, i.Err)
	errMessage := strings.SplitN(i.Err.Error(), "\n", 2)
	strOtherError := ""
	if len(errMessage) > 1 {
		strOtherError = strings.TrimSpace(errMessage[1])
	}
	buf := bytes.NewBuffer(nil)
	w := csv.NewWriter(buf)
	w.Write(i.Data)
	w.Flush()
	return fmt.Sprintf("第%d行数据 [%s] 错误:%s\n%s", i.RowNo,
		strings.TrimSpace(buf.String()), errMessage[0], strOtherError)
}
