package main

import (
	"fmt"
	"math/rand"
	"strconv"
	"strings"
)

type Dice struct {
	Number uint // Number of dice to roll
}

// Perform the rolls without the Pips
func (d *Dice) Roll() (total, wild int, rolls []int) {
	var die int
	for range make([]byte, d.Number-1) {
		die = rand.Intn(6) + 1
		total += die
		rolls = append(rolls, die)
	}
	wild = rand.Intn(6) + 1
	return
}

// Returns the text form for this Dice
//
// Without the Pips
func (d *Dice) String() string {
	return fmt.Sprintf("%dD", d.Number)
}

func NewDice(D uint) *Dice {
	return &Dice{
		Number: D,
	}
}

func NewDiceFromString(text string) (*Dice, error) {
	var (
		number int
		err    error
	)
	if strings.Contains(text, "D") {
		text = strings.ReplaceAll(text, "D", "")
	}
	number, err = strconv.Atoi(text)
	if err != nil {
		return nil, err
	}
	return &Dice{
		Number: uint(number),
	}, nil
}
