"""Product label generators — delegate to the template renderer.

Template names: 'product', 'product_sealed', 'digikey'
"""

from PIL import Image
from flask import current_app

from app.labels.template_renderer import get_template, render_template


def _pick_name(name_hr: str, name_en: str, name_de: str, language: str) -> str:
    return {'hr': name_hr, 'en': name_en, 'de': name_de}.get(language, name_hr) \
           or name_hr or name_en or name_de or ''


def generate_product(
    sku: str,
    name_hr: str = '',
    name_en: str = '',
    name_de: str = '',
    location: str = '',
    barcode: str = '',
    language: str = 'hr',
) -> Image.Image:
    fields = {
        'sku':      sku,
        'name':     _pick_name(name_hr, name_en, name_de, language),
        'location': location or '',
        'barcode':  barcode or '',   # empty → vertical barcode skipped by renderer
    }
    db_path = current_app.config['DATABASE_PATH']
    return render_template(get_template('product', db_path), fields)


def generate_product_sealed(
    sku: str,
    name_hr: str = '',
    name_en: str = '',
    name_de: str = '',
    location: str = '',
    sealed_amount: int = None,
    language: str = 'hr',
) -> Image.Image:
    if not sealed_amount:
        raise ValueError('Sealed amount is required for sealed product labels.')
    fields = {
        'sku':           sku,
        'name':          _pick_name(name_hr, name_en, name_de, language),
        'location':      location or '',
        'sealed_amount': f'{sealed_amount}\u00d7',
    }
    db_path = current_app.config['DATABASE_PATH']
    return render_template(get_template('product_sealed', db_path), fields)


def generate_digikey(
    sku: str,
    name_hr: str = '',
    name_en: str = '',
    name_de: str = '',
    location: str = '',
    barcode: str = '',
    language: str = 'hr',
) -> Image.Image:
    fields = {
        'sku':      sku,
        'name':     _pick_name(name_hr, name_en, name_de, language),
        'location': location or '',
    }
    db_path = current_app.config['DATABASE_PATH']
    return render_template(get_template('digikey', db_path), fields)
