package ui

import "git.warky.dev/wdevs/relspecgo/pkg/models"

// Schema data operations - business logic for schema management

// CreateSchema creates a new schema and adds it to the database
func (se *SchemaEditor) CreateSchema(name, description string) *models.Schema {
	newSchema := &models.Schema{
		Name:        name,
		Description: description,
		Tables:      make([]*models.Table, 0),
		Sequences:   make([]*models.Sequence, 0),
		Enums:       make([]*models.Enum, 0),
	}
	se.db.UpdateDate()
	se.db.Schemas = append(se.db.Schemas, newSchema)
	return newSchema
}

// UpdateSchema updates an existing schema's properties
func (se *SchemaEditor) UpdateSchema(schemaIndex int, name, owner, description string) {
	if schemaIndex < 0 || schemaIndex >= len(se.db.Schemas) {
		return
	}
	se.db.UpdateDate()
	schema := se.db.Schemas[schemaIndex]
	schema.Name = name
	schema.Owner = owner
	schema.Description = description
	schema.UpdateDate()
}

// DeleteSchema removes a schema from the database
func (se *SchemaEditor) DeleteSchema(schemaIndex int) bool {
	if schemaIndex < 0 || schemaIndex >= len(se.db.Schemas) {
		return false
	}
	se.db.UpdateDate()
	se.db.Schemas = append(se.db.Schemas[:schemaIndex], se.db.Schemas[schemaIndex+1:]...)
	return true
}

// GetSchema returns a schema by index
func (se *SchemaEditor) GetSchema(schemaIndex int) *models.Schema {
	if schemaIndex < 0 || schemaIndex >= len(se.db.Schemas) {
		return nil
	}
	return se.db.Schemas[schemaIndex]
}

// GetAllSchemas returns all schemas
func (se *SchemaEditor) GetAllSchemas() []*models.Schema {
	return se.db.Schemas
}
