# -*- coding: utf-8 -*-
from django import forms
from livesettings import Value, IntegerValue
from livesettings.values import NOTSET

class ModelValue(Value):
    def __init__(self, group, key, queryset, **kwargs):
        self.empty_label = kwargs.pop('empty_label', '-----------')
        self.required = kwargs.pop('required', True)
        self.queryset = queryset
        super(ForeignKeyValue, self).__init__(group, key, **kwargs)

    @property
    def field(self):
        class field(forms.ModelChoiceField):
            def __init__(inst, **kwargs):
                import ipdb; ipdb.set_trace()
                forms.ModelChoiceField.__init__(
                    inst,
                    queryset=self.queryset, 
                    empty_label = self.empty_label,
                    required = self.required,
                    **kwargs)

        return field

    def choice_field(self, **kwargs):
        if self.hidden:
            kwargs['widget'] = forms.MultipleHiddenInput()
        return self.field(**kwargs)

    def to_python(self, value):
        if value == NOTSET:
            return None
        if isinstance(value, unicode) and value.isdigit():
            return self.queryset.get(pk=int(value))
        return value

    def to_editor(self, value):
        if value in (NOTSET, ''):
            return None
        return int(value)

    def get_db_prep_save(self, value):
        if not value:
            return ''
        return unicode(value.pk)

    def _get_choices(self):
        return [(obj.pk, obj) for obj in self.queryset]

    def _set_choices(self, value):
        """
        Ignore
        """
    choices = property(_get_choices, _set_choices)