// SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
//
// SPDX-License-Identifier: AGPL-3.0-or-later

// Package validate provides input validation helpers.
package validate

import (
	"errors"
	"fmt"

	"github.com/google/uuid"

	"git.secluded.site/lune/internal/deeplink"
)

// ErrInvalidID indicates an ID is not a valid UUID.
var ErrInvalidID = errors.New("invalid ID: expected UUID format")

// ErrInvalidReference indicates the input is not a valid UUID or deep link.
var ErrInvalidReference = errors.New("invalid reference: expected UUID or lunatask:// deep link")

// ID validates that the given string is a valid Lunatask ID (UUID).
func ID(id string) error {
	if _, err := uuid.Parse(id); err != nil {
		return fmt.Errorf("%w: %s", ErrInvalidID, id)
	}

	return nil
}

// Reference parses a UUID or Lunatask deep link and returns the normalised UUID.
// Accepts formats:
//   - UUID: "3bbf1923-64ae-4bcf-96a9-9bb86c799dab"
//   - Deep link: "lunatask://areas/3bbf1923-64ae-4bcf-96a9-9bb86c799dab"
func Reference(input string) (string, error) {
	id, err := deeplink.ParseID(input)
	if err != nil {
		return "", fmt.Errorf("%w: %s", ErrInvalidReference, input)
	}

	return id, nil
}
