package executor

import "github.com/everything-on-mysql/cassandra-on-mysql/pkg/cql/parser"

func deleteAssignments(stmt *parser.DeleteStatement) []*parser.Assignment {
	if stmt == nil {
		return nil
	}
	targets := stmt.Targets
	if len(targets) == 0 && len(stmt.Columns) > 0 {
		targets = make([]parser.Expression, len(stmt.Columns))
		for i, col := range stmt.Columns {
			targets[i] = &parser.ColumnExpr{Name: col, Token: stmt.Token}
		}
	}
	if len(targets) == 0 {
		return nil
	}
	assignments := make([]*parser.Assignment, 0, len(targets))
	for _, target := range targets {
		if target == nil {
			continue
		}
		assignments = append(assignments, &parser.Assignment{
			Target: target,
			Column: deleteTargetColumnName(target),
			Value:  &parser.NullLiteral{Token: stmt.Token},
			Op:     "=",
		})
	}
	return assignments
}

func deleteTargetColumnName(expr parser.Expression) string {
	if expr == nil {
		return ""
	}
	switch e := expr.(type) {
	case *parser.TypeHintExpr:
		return deleteTargetColumnName(e.Expr)
	case *parser.CollectionAccessExpr:
		return deleteTargetColumnName(e.Target)
	case *parser.ColumnExpr:
		if e.Table != "" {
			return e.Table + "." + e.Name
		}
		return e.Name
	default:
		return expr.String()
	}
}
