package com.storycove.dto;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;

import java.time.LocalDateTime;
import java.util.List;
import java.util.UUID;

public class TagDto {
    
    private UUID id;
    
    @NotBlank(message = "Tag name is required")
    @Size(max = 100, message = "Tag name must not exceed 100 characters")
    private String name;
    
    @Size(max = 7, message = "Color must be a valid hex color code")
    private String color;
    
    @Size(max = 500, message = "Description must not exceed 500 characters")
    private String description;
    
    private Integer storyCount;
    private Integer collectionCount;
    private Integer aliasCount;
    private List<TagAliasDto> aliases;
    private LocalDateTime createdAt;
    private LocalDateTime updatedAt;
    
    public TagDto() {}
    
    public TagDto(String name) {
        this.name = name;
    }
    
    // Getters and Setters
    public UUID getId() {
        return id;
    }
    
    public void setId(UUID id) {
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public String getColor() {
        return color;
    }
    
    public void setColor(String color) {
        this.color = color;
    }
    
    public String getDescription() {
        return description;
    }
    
    public void setDescription(String description) {
        this.description = description;
    }
    
    public Integer getStoryCount() {
        return storyCount;
    }
    
    public void setStoryCount(Integer storyCount) {
        this.storyCount = storyCount;
    }
    
    public Integer getCollectionCount() {
        return collectionCount;
    }
    
    public void setCollectionCount(Integer collectionCount) {
        this.collectionCount = collectionCount;
    }
    
    public Integer getAliasCount() {
        return aliasCount;
    }
    
    public void setAliasCount(Integer aliasCount) {
        this.aliasCount = aliasCount;
    }
    
    public List<TagAliasDto> getAliases() {
        return aliases;
    }
    
    public void setAliases(List<TagAliasDto> aliases) {
        this.aliases = aliases;
    }
    
    public LocalDateTime getCreatedAt() {
        return createdAt;
    }
    
    public void setCreatedAt(LocalDateTime createdAt) {
        this.createdAt = createdAt;
    }
    
    public LocalDateTime getUpdatedAt() {
        return updatedAt;
    }
    
    public void setUpdatedAt(LocalDateTime updatedAt) {
        this.updatedAt = updatedAt;
    }
}