package dialectsfcrm

import (
	"context"
	"errors"
	"net/http"

	"github.com/nexuscrm/shared/pkg/contract"
	"github.com/nexuscrm/shared/pkg/dialect"
)

func AdminAutoNumberRefreshMetadataNeutralHandler(ctx context.Context, _ *dialect.Request, deps dialect.Deps) (*dialect.Response, error) {
	maintenance := deps.Contracts.MetadataMaintenance
	if maintenance == nil {
		return jsonResponse(http.StatusServiceUnavailable, map[string]any{
			"error": "autonumber metadata source not initialized",
		}), nil
	}

	result, err := maintenance.RefreshAutoNumberMetadata(ctx)
	if err != nil {
		var maintenanceErr *contract.MetadataMaintenanceError
		if errors.As(err, &maintenanceErr) && maintenanceErr.Kind == contract.MetadataMaintenanceErrorUnavailable {
			return jsonResponse(http.StatusServiceUnavailable, map[string]any{
				"error": maintenanceErr.Error(),
			}), nil
		}
		return jsonResponse(http.StatusInternalServerError, map[string]any{
			"error": "metadata refresh failed",
			"cause": err.Error(),
		}), nil
	}
	if result == nil {
		result = &contract.AutoNumberMetadataRefreshResult{}
	}
	return jsonResponse(http.StatusOK, map[string]any{
		"status":               "refreshed",
		"ruleCount":            result.RuleCount,
		"quarantinedAfterSync": result.QuarantinedAfterSync,
		"inProcess":            result.InProcess,
	}), nil
}
