package common

import (
	"dbweb/core"
	"fmt"
	"strings"
)

type funDumpInstitution struct{}
type funDumpInstitutionModel struct {
	Name   string
	Tables string
}

func init() {

	core.RegisterFun("dumpInstitution", new(funDumpInstitution))
}
func (f funDumpInstitution) getModels(dept *core.Dept) []funDumpInstitutionModel {
	ms := []funDumpInstitutionModel{}
	for _, one := range core.InstitutionModelNames(dept) {
		b := core.LoadModel(one).Bill()
		tables := []string{
			b.Main.FullName(),
		}
		for c := range b.Child {
			tables = append(tables, c)
		}
		ms = append(ms, funDumpInstitutionModel{
			Name:   one,
			Tables: strings.Join(tables, ","),
		})
	}
	return ms
}
func (f funDumpInstitution) Get(p *core.ElementHandleArgs) {

	p.More["Models"] = f.getModels(p.User.Dept)
	p.HTML()
}
func (f funDumpInstitution) Post(p *core.ElementHandleArgs) {
	params := core.DumpInstitutionTaskParam{
		DumpType: p.Req.PostFormValue("radDumpType"),
	}
	task := &core.TaskRun{
		Db:       p.DB,
		Name:     p.Element.DisplayLabel(),
		User:     p.User,
		ClientIP: p.Req.RemoteAddr,
		Param:    params,
		Func:     core.DumpInstitution,
	}
	if err := task.GoRun(); err != nil {
		p.RenderError(err.Error())

	} else {
		p.GotoMessage(fmt.Sprintf("导出操作将在后台运行，可以<a href='%s' target='_blank'>点击查看进度</a>", p.User.Sign("/browsetask/"+task.ID())))
	}
}
