package fetdata

import (
	"html/template"
	"time"

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

type BlogPost struct {
	wrap   *wrapper.Wrapper
	object *utils.MySql_blog_post

	user     *User
	category *BlogCategory
}

func (this *BlogPost) load() *BlogPost {
	return this
}

func (this *BlogPost) Id() int {
	if this == nil {
		return 0
	}
	return this.object.A_id
}

func (this *BlogPost) User() *User {
	if this == nil {
		return nil
	}
	if this.user != nil {
		return this.user
	}
	this.user = (&User{wrap: this.wrap}).load()
	this.user.loadById(this.object.A_user)
	return this.user
}

func (this *BlogPost) Name() string {
	if this == nil {
		return ""
	}
	return this.object.A_name
}

func (this *BlogPost) Alias() string {
	if this == nil {
		return ""
	}
	return this.object.A_alias
}

func (this *BlogPost) Category() *BlogCategory {
	if this == nil {
		return nil
	}
	if this.category != nil {
		return this.category
	}
	this.category = (&BlogCategory{wrap: this.wrap}).load(nil)
	this.category.loadById(this.object.A_category)
	return this.category
}

func (this *BlogPost) Briefly() template.HTML {
	if this == nil {
		return template.HTML("")
	}
	return template.HTML(this.object.A_briefly)
}

func (this *BlogPost) Content() template.HTML {
	if this == nil {
		return template.HTML("")
	}
	return template.HTML(this.object.A_content)
}

func (this *BlogPost) DateTimeUnix() int {
	if this == nil {
		return 0
	}
	return this.object.A_datetime
}

func (this *BlogPost) DateTimeFormat(format string) string {
	if this == nil {
		return ""
	}
	return time.Unix(int64(this.object.A_datetime), 0).Format(format)
}

func (this *BlogPost) Active() bool {
	if this == nil {
		return false
	}
	return this.object.A_active > 0
}

func (this *BlogPost) Permalink() string {
	if this == nil {
		return ""
	}
	return "/blog/" + this.object.A_alias + "/"
}
