// Copyright (c) 2024 Zeni Kim <zenik@smarteching.com>
// Use of this source code is governed by MIT-style
// license that can be found in the LICENSE file.

package controllers

import (
	"fmt"

	"git.smarteching.com/goffee/core"
	"git.smarteching.com/goffee/core/template/components"
	"git.smarteching.com/jacs/goffeetabler/utils"
)

// Show basic template
func Sample(c *core.Context) *core.Response {

	// first, include all compoments
	type templateData struct {
		PageCard components.PageCard
	}

	// now fill data of the components
	tmplData := templateData{
		PageCard: components.PageCard{
			CardTitle: "Framework Goffee",
			CardBody:  "Powered by Golang",
		},
	}

	return c.Response.Template("basic.html", tmplData)

}

// Show basic app login
func AppLogin(c *core.Context) *core.Response {

	// first, include all compoments
	// first, include all compoments
	type templateData struct {
		PageCard components.PageCard
	}

	// now fill data of the components
	tmplData := templateData{
		PageCard: components.PageCard{
			CardTitle: "Card title",
			CardBody:  "Loerm ipsum at deim",
		},
	}
	return c.Response.Template("login.html", tmplData)
}

// Show basic app login
func AppSession(c *core.Context) *core.Response {

	var session = new(utils.SessionUser)

	// true if session is active
	hassession := session.Init(c)

	//session.Set("numberdos", 66)

	type templateData struct {
		PageCard components.PageCard
	}

	// now fill data of the components
	tmplData := templateData{}

	if hassession {

		sesiondata := ""
		cardtitle := fmt.Sprintf("Session user id: %v", session.GetUserID())
		numberdos, ok := session.Get("numberdos")

		if numberdos != nil {
			numberdos = numberdos.(float64) + 10
		} else {
			numberdos = 10
		}

		session.Set("numberdos", numberdos)

		if ok {
			sesiondata = fmt.Sprintf("OK, Session  numberdos has %v", numberdos)
		} else {
			sesiondata = fmt.Sprintf("No ok, session numberdos has %v", numberdos)
		}

		// delete single
		//session.Delete("numberdos")

		// delete all data
		//session.Flush()

		tmplData = templateData{
			PageCard: components.PageCard{
				CardTitle: cardtitle,
				CardBody:  sesiondata,
			},
		}

		return c.Response.Template("appsession.html", tmplData)

	} else {

		return c.Response.Template("login.html", tmplData)

	}

}

// Show basic app sample
func AppSample(c *core.Context) *core.Response {

	// first, include all compoments
	type templateData struct {
		PageCard        components.PageCard
		ContentDropdown components.ContentDropdown
	}

	// now fill data of the components
	tmplData := templateData{
		PageCard: components.PageCard{
			CardTitle: "Protected page",
			CardBody:  "If you can see this page, your are loggedin",
		},
		ContentDropdown: components.ContentDropdown{
			Label: "dropdown",
			Items: []components.ContentDropdownItem{
				{
					Text: "Signout",
					Link: "#",
					ID:   "signout",
				},
				{
					Text:       "item disabled",
					Link:       "#",
					IsDisabled: true,
				},
			},
		},
	}
	//fmt.Printf("Outside cookie user is: %s", user.Email)

	return c.Response.Template("app.html", tmplData)

}
