package parser

import "golang.org/x/net/html"

// ContentType represents the type of editable content
type ContentType string

const (
	ContentText     ContentType = "text"
	ContentMarkdown ContentType = "markdown"
	ContentLink     ContentType = "link"
)

// Element represents a parsed editable element
type Element struct {
	FilePath  string      `json:"file_path"`
	Node      *html.Node  `json:"-"` // Don't serialize HTML node
	ContentID string      `json:"content_id"`
	Type      ContentType `json:"type"`
	Tag       string      `json:"tag"`
	Classes   []string    `json:"classes"`
	Content   string      `json:"content"`
	HasID     bool        `json:"has_id"`    // Whether element had existing ID
	Generated bool        `json:"generated"` // Whether ID was generated
}

// ParseResult contains the results of parsing HTML files
type ParseResult struct {
	Elements []Element  `json:"elements"`
	Warnings []string   `json:"warnings"`
	Stats    ParseStats `json:"stats"`
}

// ParseStats provides statistics about the parsing operation
type ParseStats struct {
	FilesProcessed int                 `json:"files_processed"`
	TotalElements  int                 `json:"total_elements"`
	ExistingIDs    int                 `json:"existing_ids"`
	GeneratedIDs   int                 `json:"generated_ids"`
	TypeBreakdown  map[ContentType]int `json:"type_breakdown"`
}
