package database

import (
	"time"

	"github.com/google/uuid"
	"gorm.io/gorm"
)

const (
	SubjectProgramming = "Programming"
	SubjectPentesting  = "Pentesting"
)

// Base contains common columns for all tables
type Base struct {
	ID        uuid.UUID `gorm:"primaryKey;autoIncrement:false"`
	CreatedAt time.Time
	UpdatedAt time.Time
	DeletedAt time.Time
}

// BeforeCreate will set Base struct before every insert
func (base *Base) BeforeCreate(tx *gorm.DB) error {
	// uuid.New() creates a new random UUID or panics.
	base.ID = uuid.New()

	// generate timestamps
	var t time.Time = time.Now()
	base.CreatedAt, base.UpdatedAt = t, t

	return nil
}

// AfterUpdate will update the Base struct after every update
func (base *Base) AfterUpdate(tx *gorm.DB) error {
	// update timestamps
	base.UpdatedAt = time.Now()
	return nil
}

type Post struct {
	Base
	Title     string `gorm:"type:varchar(256);"`
	Intro     string
	HtmlPath  string `gorm:"type:varchar(256);uniqueindex;"`
	Subject   string `gorm:"type:varchar(256);"`
	MainImage string `gorm:"type:varchar(256);"`

	Body string `sql:"-"`
}

type SidebarLink struct {
	Base
	Name string
	Link string
}
