from django import template

from management.models import Good, Vendor, GoodCategory, StorageFacility
from project.models import Project

from django.conf import settings
import json

register = template.Library()

@register.simple_tag
def get_all_goods_name_with_unit_of_measurement():
    try:
        goods = Good.objects.values("name", "unit_of_measurement")
        return goods
    except Exception as error:
        raise error

@register.simple_tag    
def main_app_url():
    try:
        return getattr(settings, 'MAIN_APP_URL')
    except Exception as error:
        raise error

@register.simple_tag
def get_all_projects_names():
    try:
        projects_names = Project.objects.values("name")
        return projects_names
    except Exception as error:
        raise error

@register.simple_tag
def get_all_vendors_names():
    try:
        vendor_names = Vendor.objects.values("name")
        return vendor_names
    except Exception as error:
        raise error

@register.simple_tag
def get_all_storages_names():
    try:
        storages_names = StorageFacility.objects.values("name")
        return storages_names
    except Exception as error:
        raise error


@register.simple_tag
def get_all_categories_names():
    try:
        categories_names = GoodCategory.objects.values("name")
        return categories_names
    except Exception as error:
        raise error

@register.simple_tag(takes_context=True)
def get_show_config_for_user(context):
    try:
        import os
        request = context['request']
        file_config = os.path.abspath('config.json')
        project_name = getattr(settings, 'PROJECT_NAME')
        user_groups =request.user.groups.values_list('name',flat = True)
        user_group = user_groups.first()
        with open(file_config, 'r') as f:
            config = json.load(f)
        return config['CONFIG'][project_name]['SHOW'][user_group]
    except Exception as error:
        raise error
    
@register.filter
def humanize_field_name(field):
    field_names = {
    'name': 'Назва',
    'customer': 'Замовник',
    'name_item': 'Товар',
    'date_start':'Дата початку',
    'date_end':'Кінцева дата',
    'quantity':'Кількість',
    'description':'Опис'
    }
    return field_names.get(field, field)