package modules

import (
	"golang-fave/engine/utils"
	"golang-fave/engine/wrapper"
)

func (this *Modules) RegisterAction_IndexFirstUser() *Action {
	return this.newAction(AInfo{
		WantDB: true,
		Mount:  "index-first-user",
	}, func(wrap *wrapper.Wrapper) {
		pf_first_name := utils.Trim(wrap.R.FormValue("first_name"))
		pf_last_name := utils.Trim(wrap.R.FormValue("last_name"))
		pf_email := utils.Trim(wrap.R.FormValue("email"))
		pf_password := utils.Trim(wrap.R.FormValue("password"))

		if pf_email == "" {
			wrap.MsgError(`Please specify user email`)
			return
		}

		if !utils.IsValidEmail(pf_email) {
			wrap.MsgError(`Please specify correct user email`)
			return
		}

		if pf_password == "" {
			wrap.MsgError(`Please specify user password`)
			return
		}

		// Security, check if still need to run this action
		var count int
		err := wrap.DB.QueryRow(
			wrap.R.Context(),
			`SELECT
				COUNT(*)
			FROM
				fave_users
			;`,
		).Scan(
			&count,
		)
		if *wrap.LogCpError(&err) != nil {
			wrap.MsgError(err.Error())
			return
		}
		if count > 0 {
			wrap.MsgError(`CMS is already configured`)
			return
		}

		_, err = wrap.DB.Exec(
			wrap.R.Context(),
			`INSERT INTO fave_users SET
				id = 1,
				first_name = ?,
				last_name = ?,
				email = ?,
				password = MD5(?),
				admin = 1,
				active = 1
			;`,
			pf_first_name,
			pf_last_name,
			pf_email,
			pf_password,
		)
		if err != nil {
			wrap.MsgError(err.Error())
			return
		}

		wrap.ResetCacheBlocks()

		// Reload current page
		wrap.Write(`window.location.reload(false);`)
	})
}