package evaluator

import (
	"fmt"
	"matheval/ast"
	"matheval/token"
)

// Eval evaluates an AST node and returns the result.
// Returns an error on division by zero.
func Eval(node ast.Node) (float64, error) {
	switch n := node.(type) {
	case *ast.NumberLit:
		return n.Value, nil

	case *ast.BinaryExpr:
		left, err := Eval(n.Left)
		if err != nil {
			return 0, err
		}
		right, err := Eval(n.Right)
		if err != nil {
			return 0, err
		}

		switch n.Op {
		case token.Plus:
			return left + right, nil
		case token.Minus:
			return left - right, nil
		case token.Star:
			return left * right, nil
		case token.Slash:
			if right == 0 {
				return 0, fmt.Errorf("division by zero")
			}
			return left / right, nil
		default:
			return 0, fmt.Errorf("unknown operator: %v", n.Op)
		}

	default:
		return 0, fmt.Errorf("unknown node type: %T", node)
	}
}
