# -*- coding: utf-8 -*-
from django.db import models
from django.core.exceptions import ValidationError

import os
import uuid
# Create your models here.

def get_path_for_good_photo(instance, filename):
    # 'images/' + str(instance.id) + '/' + filename
    return os.path.join('images', str(instance.id), filename)

class Good(models.Model):
    id = models.CharField(max_length=40 ,primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=255, verbose_name='Назва')
    description = models.TextField(blank=True, null=True, verbose_name='Опис')
    unit_of_measurement = models.CharField(max_length=50, verbose_name='Одиниця виміру')
    photo = models.ImageField(upload_to=get_path_for_good_photo, blank=True, verbose_name='Фото')
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='дата')
    updated_at = models.DateTimeField(auto_now_add=True, verbose_name='дата') 
    article =  models.CharField(max_length=200, verbose_name='Ариткул',  blank=True, null=True)
    created_by = models.CharField(max_length=200, verbose_name='Користувач', default='System', blank=True, null=True)
    is_delete  = models.BooleanField(default=False, verbose_name='Видалено')
    category = models.ForeignKey('GoodCategory', on_delete=models.CASCADE, blank=True, null=True, verbose_name='Категорія')

    class Meta:
        verbose_name = 'ТМЦ'
        verbose_name_plural = 'ТМЦ'

    def __str__(self):
        """
        String for representing the Model object (in Admin site etc.)
        """
        return self.name

class GoodCategory(models.Model):
    id = models.CharField(max_length=40 ,primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=200, verbose_name='Назва')
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='Дата створення', blank=True, null=True)
    created_by = models.CharField(max_length=200, verbose_name='Користувач', default='System', blank=True, null=True)

    class Meta:
        verbose_name = 'Категорія'
        verbose_name_plural = 'Категорії'
    
    def clean(self):
        if len(self.name) < 3:
            raise ValidationError({'name': "Не менше 3-х символів"})
        
    def __str__(self):
        """
        String for representing the Model object (in Admin site etc.)
        """
        return self.name

class StorageFacility(models.Model):
    id = models.CharField(max_length=40 ,primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=200, verbose_name='Назва')
    location = models.TextField(blank = True, verbose_name='Розташування')
    is_delete  = models.BooleanField(default=False, verbose_name='Видалено')
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='Дата створення', blank=True, null=True)
    created_by = models.CharField(max_length=200, verbose_name='Користувач', default='System', blank=True, null=True)
    locked_by = models.CharField(max_length=200, verbose_name='Користувач', default='System', blank=True, null=True)

    class Meta:
        verbose_name = 'Склад'
        verbose_name_plural = 'Склади'
    
    def __str__(self):
        """
        String for representing the Model object (in Admin site etc.)
        """
        return self.name
    
class Vendor(models.Model):
    id = models.CharField(max_length=40 ,primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=200, verbose_name='Назва')
    location = models.TextField(blank = True, verbose_name='Адреса')
    email = models.CharField(max_length=200, verbose_name='Електронна адреса',blank = True)
    phone = models.CharField(max_length=200, verbose_name='Телефон', blank = True)
    manager = models.CharField(max_length=200, verbose_name='Менеджер', blank = True)
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='Дата створення', blank=True, null=True)
    updated_at = models.DateTimeField(auto_now_add=True, verbose_name='Дата оновлення', blank=True, null=True) 
    created_by = models.CharField(max_length=200, verbose_name='Користувач', default='System', blank=True, null=True)
    config_name =  models.CharField(default='default_template',max_length=200, verbose_name='Назва для файлу конфігурації',  blank=True, null=True)
    contact  = models.ManyToManyField('VendorContact',  related_name='vendor_contact', verbose_name='Контакт',blank=True)
    is_delete  = models.BooleanField(default=False, verbose_name='Видалено')
    class Meta:
        verbose_name = 'Постачальник'
        verbose_name_plural = 'Постачальники'
        
    def __str__(self):
        """
        String for representing the Model object (in Admin site etc.)
        """
        return self.name

class VendorContact(models.Model):
    id = models.CharField(max_length=40 ,primary_key=True, default=uuid.uuid4, editable=False)
    vendor = models.ForeignKey('Vendor', on_delete=models.CASCADE, null=True, verbose_name='Постачальник')
    email = models.CharField(max_length=200, verbose_name='Електронна адреса',blank = True)
    phone = models.CharField(max_length=200, verbose_name='Телефон', blank = True)
    manager = models.CharField(max_length=200, verbose_name='Менеджер', blank = True)
    position  = models.CharField(max_length=200, verbose_name='Посада', blank = True)