package modules

import (
	"html"

	others "golang-fave/engine/wrapper/resources/others"
	utils "golang-fave/engine/wrapper/utils"
)

func (this *Module) Module_users() {
	// Do something here...
}

func (this *Module) Module_users_display() bool {
	return false
}

func (this *Module) Module_users_alias() string {
	return "users"
}

func (this *Module) Module_users_name() string {
	return "Users"
}

func (this *Module) Module_users_icon() string {
	return others.File_assets_sys_svg_user
}

func (this *Module) Module_users_order() int {
	return 100
}

func (this *Module) Module_users_submenu() []utils.ModuleSubMenu {
	result := make([]utils.ModuleSubMenu, 0)
	result = append(result, utils.ModuleSubMenu{
		Alias: "default",
		Name:  "List of users",
		Icon:  others.File_assets_sys_svg_list,
	})
	result = append(result, utils.ModuleSubMenu{
		Alias: "modify",
		Name:  "Add new user",
		Icon:  others.File_assets_sys_svg_plus,
	})
	return result
}

func (this *Module) Module_users_content() string {
	if this.smod == "default" {
		breadcrumb := this.breadcrumb([]dataBreadcrumb{
			{"List of users", ""},
		})
		data_table := this.data_table("users", "email", "ASC", []dataTableRow{
			{"id", "", nil},
			{"email", "Email", func(values *[]string) string {
				email := `<a href="/cp/users/modify/` + (*values)[0] + `/">` + html.EscapeString((*values)[1]) + `</a>`
				name := html.EscapeString((*values)[2])
				if name != "" && (*values)[3] != "" {
					name += ` ` + (*values)[3]
				}
				if name != "" {
					name = `<div><small>` + name + `</small></div>`
				}
				return `<div>` + email + `</div>` + name
			}},
			{"first_name", "", nil},
			{"last_name", "", nil},
		}, func(values *[]string) string {
			return `<a class="ico" href="/cp/users/modify/` + (*values)[0] + `/">` +
				others.File_assets_sys_svg_edit + `</a>` +
				`<a class="ico" href="#">` + others.File_assets_sys_svg_remove + `</a>`
		}, "/cp/users/default/")
		return breadcrumb + data_table
	} else if this.smod == "modify" && this.imod == 0 {
		breadcrumb := this.breadcrumb([]dataBreadcrumb{
			{"Add new user", ""},
		})
		data_form := this.data_form([]dataFormField{
			{kind: dfkHidden, name: "action", value: "users_add"},
			{kind: dfkHidden, name: "id", value: "0"},
			{kind: dfkText, caption: "User first name", name: "first_name"},
			{kind: dfkText, caption: "User last name", name: "last_name"},
			{kind: dfkEmail, caption: "User email", name: "email", required: true},
			{kind: dfkPassword, caption: "User password", name: "password", hint: "Please specify new user password", required: true},
			{kind: dfkSubmit, value: "Add", target: "add-edit-button"},
		})
		return breadcrumb + data_form
	} else if this.smod == "modify" && this.imod != 0 {
		breadcrumb := this.breadcrumb([]dataBreadcrumb{
			{"Edit user", ""},
		})
		// Load user data
		data_form := this.data_form([]dataFormField{
			{kind: dfkHidden, name: "action", value: "users_edit"},
			{kind: dfkHidden, name: "id", value: "0"},
			{kind: dfkText, caption: "User first name", name: "first_name", value: "1"},
			{kind: dfkText, caption: "User last name", name: "last_name", value: "2"},
			{kind: dfkEmail, caption: "User email", name: "email", value: "3", required: true},
			{kind: dfkPassword, caption: "User password", name: "password", hint: "Leave the field blank to not change the password"},
			{kind: dfkSubmit, value: "Add", target: "add-edit-button"},
		})
		return breadcrumb + data_form
	}
	return ""
}

func (this *Module) Module_users_sidebar() string {
	if this.smod == "modify" && this.imod == 0 {
		return `<button class="btn btn-primary btn-sidebar" id="add-edit-button">Add</button>`
	} else if this.smod == "modify" && this.imod != 0 {
		return `<button class="btn btn-primary btn-sidebar" id="add-edit-button">Save</button>`
	}
	return ""
}