#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re
from django.db import models
from django.utils.hashcompat import md5_constructor
from django.conf import settings


class MyUser(models.Model):
    userName = models.CharField(u'логин', max_length=50, unique=True)
    password = models.CharField(u'пароль', max_length=128, help_text=u'<a href="#" onClick="GeneratePassword();">Сгенерить пароль автоматически.</a>')
    firstName = models.CharField(u'имя', max_length=50, blank = True, null=True)
    lastName = models.CharField(u'фамилия', max_length=50, blank = True, null=True)
    active = models.BooleanField(u'активен')
    expire = models.DateField(u'истекает')
    comment = models.TextField(u'комментарий', blank = True, null=True)
    
    class Meta:
        verbose_name = u'пользователи'
        verbose_name_plural = u'пользователи' 

    def __unicode__(self):
        return self.userName
    
    def save(self, *args, **kwargs):        
        # Если поле пароль передано как текст, а не как соль$хеш, значит его сменили
        if not re.match('^[A-Za-z0-9]{5}\$[A-Fa-f0-9]{32}$', self.password):       
            import random
            import string
            
            chars=string.ascii_lowercase + string.digits        
            salt = ''.join(random.choice(chars) for x in range(5))
            self.password = salt + '$' + md5_constructor( md5_constructor(salt).hexdigest() + md5_constructor(self.password).hexdigest() ).hexdigest()
        
        super(MyUser, self).save(*args, **kwargs)
                

class MySession(models.Model):
    user  = models.ForeignKey(MyUser, verbose_name=u'пользователь')
    ip = models.IPAddressField(u'IP-адрес')
    start = models.DateTimeField(u'начало', auto_now_add=True)
    end = models.DateTimeField(u'конец', blank = True, null=True)
    online = models.BooleanField(u'подключен')
    
    class Meta:
        verbose_name = u'сессии'
        verbose_name_plural = u'сессии'
    
    def __unicode__(self):
        return self.ip
    
class Log(models.Model):
    TYPE_CHOICES = (
        (u'sec', u'Безопасность'),
        (u'debug', u'Отладка'),
        (u'cron', u'Планировщик'),
    )
            
    date = models.DateTimeField(u'дата', auto_now_add=True)
    msg = models.TextField(u'сообщение')
    type = models.CharField(u'тип', max_length=6, choices=TYPE_CHOICES)
    
    class Meta:
        verbose_name = u'журнал'
        verbose_name_plural = u'журнал'
    
    def __unicode__(self):
        return self.msg
    
    # Сохранять логи типа debug если только включен WIFI_ADMIN_DEBUG
    def save(self, *args, **kwargs): 
        if self.type != 'debug':
            super(Log, self).save(*args, **kwargs)
        else:
            if settings.WIFI_ADMIN_DEBUG:
                super(Log, self).save(*args, **kwargs)
    
 