from django.forms.widgets import Select, TextInput
from django.utils.safestring import mark_safe


class NoNameWidget(object):
    def _update_to_noname_class_name(self, name, kwargs_dict):
        if "attrs" in kwargs_dict:
            if "class" in kwargs_dict["attrs"]:
                kwargs_dict["attrs"]["class"] += " %s" % (name.replace("_", "-"),)
            else:
                kwargs_dict["attrs"].update({'class': name.replace("_", "-")})
        else:
            kwargs_dict["attrs"] = {'class': name.replace("_", "-")}

        return kwargs_dict

    def _strip_name_attr(self, widget_string, name):
        return widget_string.replace("name=\"%s\"" % (name,), "")

    class Media:
        css = {
            'all': ('zebra/card-form.css',)
        }
        js = ('zebra/card-form.js', 'https://js.stripe.com/v1/')


class NoNameTextInput(TextInput, NoNameWidget):
    def render(self, name, *args, **kwargs):
        kwargs = self._update_to_noname_class_name(name, kwargs)
        return mark_safe(
            self._strip_name_attr(super(NoNameTextInput, self).render(name, *args, **kwargs), name))


class NoNameSelect(Select, NoNameWidget):
    def render(self, name, *args, **kwargs):
        kwargs = self._update_to_noname_class_name(name, kwargs)
        return mark_safe(
            self._strip_name_attr(super(NoNameSelect, self).render(name, *args, **kwargs), name))
