// meta4ra -- Metalink 4.0 utilities
// Copyright (C) 2021-2026 Sergey Matveev <stargrave@stargrave.org>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, version 3 of the License.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

package main

import (
	"bufio"
	"flag"
	"fmt"
	"io"
	"log"
	"os"
	"strings"

	meta4ra "go.stargrave.org/meta4ra/v2/internal"
)

func runHash() {
	hashers := flag.String("hashers", meta4ra.HashersDefault,
		"hash-name commandline[\\n...]")
	all := flag.Bool("all", false, "Print all hashes, not the first one")
	flag.Usage = func() {
		fmt.Fprintf(flag.CommandLine.Output(),
			"Usage: %s [-hashers ...] <data | read hash name\n", os.Args[0])
		flag.PrintDefaults()
		fmt.Fprint(flag.CommandLine.Output(), `
Only the first hash from -hashers will be used.
`)
	}
	flag.Parse()

	if *showVersion {
		fmt.Println(meta4ra.Version())
		return
	}
	if *showWarranty {
		fmt.Println(meta4ra.Warranty)
		return
	}

	hsh := *hashers
	if !*all {
		if i := strings.Index(hsh, ","); i != -1 {
			hsh = hsh[:i]
		}
	}
	hasher, err := meta4ra.NewHasher(hsh)
	if err != nil {
		log.Fatal(err)
	}
	if err = hasher.Start(); err != nil {
		log.Fatal(err)
	}
	if _, err = io.Copy(hasher, bufio.NewReaderSize(
		os.Stdin, meta4ra.BufLen)); err != nil {
		log.Fatal(err)
	}
	sums, err := hasher.Sums()
	if err != nil {
		log.Fatal(err)
	}
	if *all {
		for _, h := range sums {
			fmt.Println(h.Type, h.Hash)
		}
	} else {
		fmt.Println(sums[0].Hash, sums[0].Type)
	}
}
