from random import randint

from inventree.api import InvenTreeAPI

from inventree.part import Part, Parameter, ParameterTemplate
from inventree.stock import StockItem

api = InvenTreeAPI("http://localhost:8000", username="admin", password="inventree")

# Pin headers category
cat_id = 21

# Storage location
loc_id = 10

rows = [1, 2]
pitch = [1.27, 2.0, 2.54]
ways = range(2, 11)

# Parameter templates
templates = {}

for tmp in ParameterTemplate.list(api):
    templates[tmp.name] = tmp.pk

for r in rows:
    for p in pitch:
        for w in ways:

            n = r * w

            name = f"PinHeader_{r}x{w:02d}x{p}mm"
            description = f"Male pin header connector, {r} rows, {n} positions, {p}mm pitch, vertical"
            keywords = "pin header connector"

            # Check if this part already exists
            results = Part.list(api, search=name)

            if len(results) > 0:
                part = results[0]
            else:
                part = Part.create(
                    api,
                    {
                        'name': name,
                        'description': description,
                        'keywords': keywords,
                        'category': cat_id,
                        'purchaseable': True,
                        'component': True,
                    }
                )

            # Create stock item for this item
            items = StockItem.list(api, part=part.pk)

            if len(items) == 0:
                q = randint(0, 25)

                if q > 0:
                    StockItem.create(
                        api,
                        {
                            'part': part.pk,
                            'quantity': q,
                            'location': loc_id,
                        }
                    )

            # Generate parameters for each item
            Parameter.create(
                api,
                {
                    'part': part.pk,
                    'template': templates['Pitch'],
                    'data': p
                }
            )

            Parameter.create(
                api,
                {
                    'part': part.pk,
                    'template': templates['Positions'],
                    'data': n
                }
            )

            Parameter.create(
                api,
                {
                    'part': part.pk,
                    'template': templates['Rows'],
                    'data': r
                }
            )