//
//  Copyright 2026 The InfiniFlow Authors. All Rights Reserved.
//
//  Licensed under the Apache License, Version 2.0 (the "License");
//  you may not use this file except in compliance with the License.
//  You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
//  Unless required by applicable law or agreed to in writing, software
//  distributed under the License is distributed on an "AS IS" BASIS,
//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//  See the License for the specific language governing permissions and
//  limitations under the License.
//

package entity

// UserCanvas user canvas model
type UserCanvas struct {
	ID             string  `gorm:"column:id;primaryKey;size:32" json:"id"`
	Avatar         *string `gorm:"column:avatar;type:longtext" json:"avatar,omitempty"`
	UserID         string  `gorm:"column:user_id;size:255;not null;index" json:"user_id"`
	Tags           string  `gorm:"column:tags;size:512;not null;default:'';index" json:"tags"`
	Title          *string `gorm:"column:title;size:255" json:"title,omitempty"`
	Permission     string  `gorm:"column:permission;size:16;not null;default:me;index" json:"permission"`
	Release        bool    `gorm:"column:release;not null;default:false;index" json:"release"`
	Description    *string `gorm:"column:description;type:longtext" json:"description,omitempty"`
	CanvasType     *string `gorm:"column:canvas_type;size:32;index" json:"canvas_type,omitempty"`
	CanvasCategory string  `gorm:"column:canvas_category;size:32;not null;default:agent_canvas;index" json:"canvas_category"`
	DSL            JSONMap `gorm:"column:dsl;type:longtext" json:"dsl,omitempty"`
	BaseModel
}

// TableName specify table name
func (UserCanvas) TableName() string {
	return "user_canvas"
}

// CanvasTemplate canvas template model
type CanvasTemplate struct {
	ID             string    `gorm:"column:id;primaryKey;size:32" json:"id"`
	Avatar         *string   `gorm:"column:avatar;type:longtext" json:"avatar,omitempty"`
	Title          JSONMap   `gorm:"column:title;type:longtext" json:"title"`
	Description    JSONMap   `gorm:"column:description;type:longtext" json:"description"`
	CanvasType     *string   `gorm:"column:canvas_type;size:32;index" json:"canvas_type,omitempty"`
	CanvasTypes    JSONSlice `gorm:"column:canvas_types;type:longtext" json:"canvas_types,omitempty"`
	CanvasCategory string    `gorm:"column:canvas_category;size:32;not null;default:agent_canvas;index" json:"canvas_category"`
	DSL            JSONMap   `gorm:"column:dsl;type:longtext" json:"dsl,omitempty"`
	BaseModel
}

// TableName specify table name
func (CanvasTemplate) TableName() string {
	return "canvas_template"
}

// UserCanvasVersion user canvas version model
type UserCanvasVersion struct {
	ID           string  `gorm:"column:id;primaryKey;size:32" json:"id"`
	UserCanvasID string  `gorm:"column:user_canvas_id;size:255;not null;index" json:"user_canvas_id"`
	Title        *string `gorm:"column:title;size:255" json:"title,omitempty"`
	Description  *string `gorm:"column:description;type:longtext" json:"description,omitempty"`
	Release      bool    `gorm:"column:release;not null;default:false;index" json:"release"`
	DSL          JSONMap `gorm:"column:dsl;type:longtext" json:"dsl,omitempty"`
	BaseModel
}

// TableName specify table name
func (UserCanvasVersion) TableName() string {
	return "user_canvas_version"
}
