/*
 * Copyright 2026 Oleg Borodin <onborodin@gmail.com>
 */
package gcrcli

import (
	"context"

	"github.com/google/go-containerregistry/pkg/authn"
	"github.com/google/go-containerregistry/pkg/crane"
	"github.com/google/go-containerregistry/pkg/name"
	"github.com/google/go-containerregistry/pkg/v1/remote/transport"
)

func (cli *Client) DeleteImage(ctx context.Context, imagepath string) error {
	var err error

	imagepath, username, password, err := repackReference(imagepath)
	if err != nil {
		return err
	}
	options := make([]crane.Option, 0)
	options = append(options, crane.WithContext(ctx))

	ref, err := name.ParseReference(imagepath)
	if err != nil {
		return err
	}
	repo := ref.Context()
	if err != nil {
		return err
	}

	if username != "" && password != "" {
		defaultTransport := NewRoundTripper(cli.skipTLSVerify)
		scopes := []string{repo.Scope(transport.PullScope)}

		regName := repo.RegistryStr()
		reg, err := name.NewRegistry(regName)
		if err != nil {
			return err
		}
		basicAuth := &authn.Basic{
			Username: username,
			Password: password,
		}
		authTransport, err := transport.NewWithContext(ctx, reg, basicAuth, defaultTransport, scopes)
		if err != nil {
			return err
		}
		options = append(options, crane.WithTransport(authTransport))
	} else {
		transport := NewRoundTripper(cli.skipTLSVerify)
		options = append(options, crane.WithTransport(transport))
	}

	err = crane.Delete(imagepath, options...)
	if err != nil {
		return err
	}
	return err
}
