package sales

import (
	"context"
	"strings"
	"testing"
	"time"

	"github.com/shopspring/decimal"
)

func TestCreateSalesVoucher_DefaultsVoucherDateAndAutoGeneratesNumber(t *testing.T) {
	st := newFakeStore()
	svc := NewService(st, nil, nil)
	ctx := context.Background()

	// 1. Create with custom voucher number but omitted voucher_date
	desc := "Promo Akhir Tahun"
	v1, err := svc.CreateSalesVoucher(ctx, SalesVoucherInput{
		VoucherNumber: "3113",
		Type:          "promotion",
		Amount:        decimal.NewFromInt(100000),
		Description:   &desc,
	})
	if err != nil {
		t.Fatalf("unexpected error creating voucher: %v", err)
	}
	if v1.VoucherNumber != "3113" {
		t.Errorf("voucher_number = %s, want 3113", v1.VoucherNumber)
	}
	today := time.Now().Format("2006-01-02")
	if v1.VoucherDate != today {
		t.Errorf("voucher_date = %s, want today %s", v1.VoucherDate, today)
	}

	// 2. Create with omitted voucher_number -> auto-generates with VCH prefix
	v2, err := svc.CreateSalesVoucher(ctx, SalesVoucherInput{
		Type:        "sales_voucher",
		Amount:      decimal.NewFromInt(50000),
		Description: &desc,
	})
	if err != nil {
		t.Fatalf("unexpected error auto-generating voucher number: %v", err)
	}
	if !strings.HasPrefix(v2.VoucherNumber, "VCH-") {
		t.Errorf("expected auto-generated voucher number with VCH- prefix, got: %s", v2.VoucherNumber)
	}
	if v2.VoucherDate != today {
		t.Errorf("voucher_date = %s, want today %s", v2.VoucherDate, today)
	}
}
