package models

import (
	"fmt"
	"path/filepath"

	"github.com/spf13/viper"
)

type AttachmentType = uint8

const (
	AttachmentOthers = AttachmentType(iota)
	AttachmentPhoto
	AttachmentVideo
	AttachmentAudio
)

type Attachment struct {
	BaseModel

	FileID      string         `json:"file_id"`
	Filesize    int64          `json:"filesize"`
	Filename    string         `json:"filename"`
	Mimetype    string         `json:"mimetype"`
	Hashcode    string         `json:"hashcode"`
	Type        AttachmentType `json:"type"`
	ExternalUrl string         `json:"external_url"`
	Author      Account        `json:"author"`
	ArticleID   *uint          `json:"article_id"`
	MomentID    *uint          `json:"moment_id"`
	CommentID   *uint          `json:"comment_id"`
	AuthorID    uint           `json:"author_id"`
}

func (v Attachment) GetStoragePath() string {
	basepath := viper.GetString("content")
	return filepath.Join(basepath, v.FileID)
}

func (v Attachment) GetAccessPath() string {
	return fmt.Sprintf("/api/attachments/o/%s", v.FileID)
}