package requests

import (
	"time"

	"github.com/shopspring/decimal"

	"github.com/treytartt/honeydue-api/internal/models"
)

// CreateDocumentRequest represents the request to create a document
type CreateDocumentRequest struct {
	ResidenceID   uint                 `json:"residence_id" validate:"required"`
	Title         string               `json:"title" validate:"required,min=1,max=200"`
	Description   string               `json:"description" validate:"max=10000"`
	DocumentType  models.DocumentType  `json:"document_type" validate:"omitempty,oneof=general warranty receipt contract insurance manual"`
	FileURL       string               `json:"file_url" validate:"max=500"`
	FileName      string               `json:"file_name" validate:"max=255"`
	FileSize      *int64               `json:"file_size" validate:"omitempty,min=0"`
	MimeType      string               `json:"mime_type" validate:"max=100"`
	PurchaseDate  *time.Time           `json:"purchase_date"`
	ExpiryDate    *time.Time           `json:"expiry_date"`
	PurchasePrice *decimal.Decimal     `json:"purchase_price"`
	Vendor        string               `json:"vendor" validate:"max=200"`
	SerialNumber  string               `json:"serial_number" validate:"max=100"`
	ModelNumber   string               `json:"model_number" validate:"max=100"`
	TaskID        *uint                `json:"task_id"`
	ImageURLs     []string             `json:"image_urls" validate:"omitempty,max=20,dive,max=500"` // Multiple image URLs
}

// UpdateDocumentRequest represents the request to update a document
type UpdateDocumentRequest struct {
	Title         *string              `json:"title" validate:"omitempty,min=1,max=200"`
	Description   *string              `json:"description" validate:"omitempty,max=10000"`
	DocumentType  *models.DocumentType `json:"document_type" validate:"omitempty,oneof=general warranty receipt contract insurance manual"`
	FileURL       *string              `json:"file_url" validate:"omitempty,max=500"`
	FileName      *string              `json:"file_name" validate:"omitempty,max=255"`
	FileSize      *int64               `json:"file_size" validate:"omitempty,min=0"`
	MimeType      *string              `json:"mime_type" validate:"omitempty,max=100"`
	PurchaseDate  *time.Time           `json:"purchase_date"`
	ExpiryDate    *time.Time           `json:"expiry_date"`
	PurchasePrice *decimal.Decimal     `json:"purchase_price"`
	Vendor        *string              `json:"vendor" validate:"omitempty,max=200"`
	SerialNumber  *string              `json:"serial_number" validate:"omitempty,max=100"`
	ModelNumber   *string              `json:"model_number" validate:"omitempty,max=100"`
	TaskID        *uint                `json:"task_id"`
}
