from functools import lru_cache
from dataclasses import dataclass
from typing import List
from translator.translator import _


@dataclass
class Product:
    name: str
    friendly_name: str
    description: str
    extended_description: str
    picture: str
    technical: List[str]
    hilights: List[str]


products = (
    Product(name="EyePoint_P10", friendly_name=_("EyePoint P10"), picture="P10.png",
            description=_("Автоматическая настольная система для поиска неисправных электронных компонентов на "
                          "печатных платах по методу АСА."),
            extended_description=_("Система сочетает в себе автоматическую оптическую систему распознавания выводов "
                                   "компонентов и летающий щуп для проведения электрического тестирования по методу "
                                   "аналогового сигнатурного анализа. "
                                   "Для использования системы EyePoint  Вам необходима последняя версия драйвера. "
                                   "Предыдущие версии выложены для пользователей, которые не хотят переходить на новые версии. "),
            hilights=[_("Прост в использовании"),
                      _("Снизит нагрузку на инженера"),
                      _("Не повредит плату")],
            technical=[_("Метод тестирования: АСА"),
                       _("Диапазон частот тестирующего сигнала: 1 Гц – 100 кГц"),
                       _("Рабочие напряжения: 1,2, 3,3, 5, 12 В"),
                       _("Максимальный размер платы: 280x275 мм"),
                       _("Поддержка корпусов: LQFP, SOIC, SMD, SOT, DIP и т.д"),
                       _("Построение карты тестирования до 10 см²/мин"),
                       _("Скорость тестирования: 100 точек в мин"),
                       _("Точность установки щупа: 30 мкм"),
                       _("Время на смену платы: 30 сек"),
                       _("Тестирующее напряжение до +/- 12 В"),
                       _("Чувствительность по R 2 Ом - 450 кОм"),
                       _("Чувствительность по C 300 пФ - 100 мкФ"),
                       _("Чувствительность по L от 270 мкГн"),
                       _("Габариты и вес: 604х543х473 мм, 50 кг"),
                       _("Управляющий ПК: Intel i5 2.8 ГГц, 16 Гб RAM, 256 Гб SSD"),
                       _("Электропитание: ~220В, 300 Вт")
                       ]
            ),
    Product(name="EyePoint_P10b", friendly_name=_("EyePoint P10b"), picture="P10b.png",
            description=_("EyePoint P10b - автоматическая настольная система для поиска неисправных электронных "
                          "компонентов на печатных платах с опцией выявления контрафактных, перемаркерованных или "
                          "поврежденных компонентов в BGA корпусах."),
            extended_description=_("Система сочетает в себе автоматическую оптическую систему распознавания выводов "
                                   "компонентов и летающий щуп для проведения электрического тестирования по методу "
                                   "аналогового сигнатурного анализа. "
                                   "Для использования системы EyePoint  Вам необходима последняя версия драйвера. "
                                   "Предыдущие версии выложены для пользователей, которые не хотят переходить на новые версии. "),
            hilights=[_("PCB и BGA"),
                      _("Экономия времени на поиске до 3 раз"),
                      _("Автоматическая проверка до 2500 выводов")],
            technical=[_("Метод тестирования: АСА"),
                       _("Диапазон частот тестирующего сигнала: 1 Гц – 100 кГц"),
                       _("Рабочие напряжения: 1,2, 3,3, 5, 12 В"),
                       _("Максимальный размер платы: 280x275 мм"),
                       _("Поддержка корпусов: LQFP, SOIC, SMD, SOT, DIP и т.д."),
                       _("Поддержка тестирования корпусов типа BGA"),
                       _("Построение карты тестирования до 10 см²/мин"),
                       _("Шаг и количество выводов BGA микросхем: 1,5 - 0,4 мм, 8 - 2500 шт."),
                       _("Расположение выводов: произвольное"),
                       _("Скорость тестирования: 100 точек в мин"),
                       _("Точность установки щупа: 30 мкм"),
                       _("Время на смену платы: 30 сек"),
                       _("Тестирующее напряжение до +/- 12 В"),
                       _("Чувствительность по R 2 Ом - 450 кОм"),
                       _("Чувствительность по C 300 пФ - 100 мкФ"),
                       _("Чувствительность по L от 270 мкГн"),
                       _("Предоставляются подложки для крепления BGA микросхем"),
                       _("Габариты и вес: 604х543х473 мм, 50 кг"),
                       _("Управляющий ПК: Intel i5 2.8 ГГц, 16 Гб RAM, 256 Гб SSD"),
                       _("Электропитание: ~220В, 300 Вт")
                       ]
            ),
    Product(name="EyePoint_S2", friendly_name=_("EyePoint S2"), picture="S2.png",
            description=_("Ручная версия локализатора неисправных электронных компонентов с сенсорным экраном."),
            extended_description=_("EyePoint S2 – второе поколение настольной системы для локализации неисправных "
                                   "электронных компонентов на печатных платах методом аналогового сигнатурного "
                                   "анализа.  Система обладает большим удобным сенсорным экраном, а дополнительная "
                                   "педаль позволит упростить управление системой. "
                                   "Для использования системы EyePoint  Вам необходима последняя версия драйвера. "
                                   "Предыдущие версии выложены для пользователей, которые не хотят переходить на новые версии. "),
            hilights=[_("Простой и легкий прибор"),
                      _("Частота зондирования до 100 кГц"),
                      _("Доступен план тестирования ")],
            technical=[_("Диапазон частот тестирующего сигнала: 1 Гц – 100 кГц"),
                       _("Рабочие напряжения: 1,2, 3,3, 5, 12 В"),
                       _("В зависимости от диапазона измеряемых значений максимальное напряжение до 12 В, "
                         "максимальный ток до 250 мкА"),
                       _("Габаритные размеры: 205 х 204 х 120 мм"),
                       _("7-ми дюймовый цветной дисплей с функцией touchscreen"),
                       _("Регулируемый порог совпадения сигнатур"),
                       _("Внешняя педаль для дополнительного функционала"),
                       _("Экспорт данных в формате данных PNG на внешний Flash накопитель"),
                       _("Поддержка режима «План тестирования»"),
                       _("Возможность подключения к ПК по USB (Win, Linux)"),
                       _("Возможность программного управления (C/C++, C#, Python)")
                       ]
            ),
    Product(name="EyePoint_u2", friendly_name=_("EyePoint u2"), picture="u2.png",
            description=_("EyePoint u2 – миниатюрная система для поиска неисправных электронных компонентов на "
                          "печатных платах методом аналогового сигнатурного анализа ASA. Для работы необходимо "
                          "подключить EyePoint u2 к компьютеру по USB и начать тестирование в ручном режиме."),
            extended_description=_("EyePoint u2 – миниатюрная система для поиска неисправных электронных компонентов "
                                   "на печатных платах методом аналогового сигнатурного анализа АСА. Для работы "
                                   "необходимо подключить EyePoint u2 к компьютеру по USB и начать тестирование в "
                                   "ручном режиме. Версии: u21 – одноканальная система, u22 – двухканальная система. "
                                   "Для использования системы EyePoint  Вам необходима последняя версия драйвера. "
                                   "Предыдущие версии выложены для пользователей, которые не хотят переходить на новые версии. "),
            hilights=[_("Частота зондирования до 100 кГц"),
                      _("Миниатюрные размеры"),
                      _("Доступен функционал старшей модели S2")],
            technical=[_("Метод тестирования: АСА"),
                       _("Диапазон частот тестирующего сигнала: 1 Гц – 100 кГц"),
                       _("Рабочие напряжения: 1.2, 3.3, 5, 12 В"),
                       _("Чувствительность по току: 250 мкА, 2.5 мА, 25 мА"),
                       _("Напряжение питания: 5 В"),
                       _("Габаритные размеры: 175 х 90 х 40 мм"),
                       _("Регулируемый порог совпадения сигнатур"),
                       _("Поддержка режима «План тестирования»"),
                       _("Интерфейс связи USB 2.0"),
                       _("Поддержка ОС: Windows 7/8/10 (х64/х86), Linux"),
                       _("Возможность программного управления: C#/C++, Qt, Python"),
                       _("В зависимости от диапазона измеряемых значений максимальное напряжение до 12 В, "
                         "максимальный ток до 250 мкА")
                       ]
            ),
    Product(name="EyePoint_a2", friendly_name=_("EyePoint a2"), picture="a2.png",
            description=_("Одноканальный OEM модуль аналогового сигнатурного анализа без корпуса и пользовательского "
                          "ПО."),
            extended_description=_("EyePoint a2 - ОЕМ модуль, предназначенный для поиска неисправных электронных "
                                   "компонентов на печатных платах методом аналогового сигнатурного анализа (АСА) с "
                                   "подключением к ПК по USB и возможностью составления плана тестирования. Для "
                                   "подключения щупов используется коаксиальный кабель с обязательным подключением "
                                   "экрана кабеля к заземляющим контактам со стороны платы. С модулем предоставляется "
                                   "доступ к API для разработки собственного программного обеспечения с "
                                   "использованием результатом измерения а2. "
                                   "Для использования системы EyePoint  Вам необходима последняя версия драйвера. "
                                   "Предыдущие версии выложены для пользователей, которые не хотят переходить на новые версии. "),
            hilights=[_("Открытый API"),
                      _("Полный функционал"),
                      _("Максимально доступный")],
            technical=[_("Метод тестирования: АСА"),
                       _("Диапазон частот тестирующего сигнала: 1 Гц – 100 кГц"),
                       _("Рабочие напряжения: 1.2, 3.3, 5, 12 В"),
                       _("Чувствительность по току: 250 мкА, 2.5 мА, 25 мА"),
                       _("Интерфейс подключения к ПК: USB 2.0"),
                       _("Возможность программного управления: С#/С++; Python"),
                       _("Габаритные размеры: 60х40х5 мм"),
                       _("Напряжение питания: 5 В"),
                       _("Питание от USB разъема")
                       ]
            )
)

assert(all([" " not in p.name for p in products]))


@lru_cache(maxsize=128)
def product_by_name(name: str) -> Product:
    for product in products:
        if product.name == name:
            return product
    raise ValueError("No such product ", name)

from functools import lru_cache
from dataclasses import dataclass
from typing import List
from translator.translator import _


@dataclass
class Product:
    name: str
    friendly_name: str
    description: str
    extended_description: str
    picture: str
    technical: List[str]
    hilights: List[str]


products = (
    Product(name="EyePoint_P10", friendly_name=_("EyePoint P10"), picture="P10.png",
            description=_("Автоматическая настольная система для поиска неисправных электронных компонентов на "
                          "печатных платах по методу АСА."),
            extended_description=_("Система сочетает в себе автоматическую оптическую систему распознавания выводов "
                                   "компонентов и летающий щуп для проведения электрического тестирования по методу "
                                   "аналогового сигнатурного анализа. "
                                   "Для использования системы EyePoint  Вам необходима последняя версия драйвера. "
                                   "Предыдущие версии выложены для пользователей, которые не хотят переходить на новые версии. "),
            hilights=[_("Прост в использовании"),
                      _("Снизит нагрузку на инженера"),
                      _("Не повредит плату")],
            technical=[_("Метод тестирования: АСА"),
                       _("Диапазон частот тестирующего сигнала: 1 Гц – 100 кГц"),
                       _("Рабочие напряжения: 1,2, 3,3, 5, 12 В"),
                       _("Максимальный размер платы: 280x275 мм"),
                       _("Поддержка корпусов: LQFP, SOIC, SMD, SOT, DIP и т.д"),
                       _("Построение карты тестирования до 10 см²/мин"),
                       _("Скорость тестирования: 100 точек в мин"),
                       _("Точность установки щупа: 30 мкм"),
                       _("Время на смену платы: 30 сек"),
                       _("Тестирующее напряжение до +/- 12 В"),
                       _("Чувствительность по R 2 Ом - 450 кОм"),
                       _("Чувствительность по C 300 пФ - 100 мкФ"),
                       _("Чувствительность по L от 270 мкГн"),
                       _("Габариты и вес: 604х543х473 мм, 50 кг"),
                       _("Управляющий ПК: Intel i5 2.8 ГГц, 16 Гб RAM, 256 Гб SSD"),
                       _("Электропитание: ~220В, 300 Вт")
                       ]
            ),
    Product(name="EyePoint_P10b", friendly_name=_("EyePoint P10b"), picture="P10b.png",
            description=_("EyePoint P10b - автоматическая настольная система для поиска неисправных электронных "
                          "компонентов на печатных платах с опцией выявления контрафактных, перемаркерованных или "
                          "поврежденных компонентов в BGA корпусах."),
            extended_description=_("Система сочетает в себе автоматическую оптическую систему распознавания выводов "
                                   "компонентов и летающий щуп для проведения электрического тестирования по методу "
                                   "аналогового сигнатурного анализа. "
                                   "Для использования системы EyePoint  Вам необходима последняя версия драйвера. "
                                   "Предыдущие версии выложены для пользователей, которые не хотят переходить на новые версии. "),
            hilights=[_("PCB и BGA"),
                      _("Экономия времени на поиске до 3 раз"),
                      _("Автоматическая проверка до 2500 выводов")],
            technical=[_("Метод тестирования: АСА"),
                       _("Диапазон частот тестирующего сигнала: 1 Гц – 100 кГц"),
                       _("Рабочие напряжения: 1,2, 3,3, 5, 12 В"),
                       _("Максимальный размер платы: 280x275 мм"),
                       _("Поддержка корпусов: LQFP, SOIC, SMD, SOT, DIP и т.д."),
                       _("Поддержка тестирования корпусов типа BGA"),
                       _("Построение карты тестирования до 10 см²/мин"),
                       _("Шаг и количество выводов BGA микросхем: 1,5 - 0,4 мм, 8 - 2500 шт."),
                       _("Расположение выводов: произвольное"),
                       _("Скорость тестирования: 100 точек в мин"),
                       _("Точность установки щупа: 30 мкм"),
                       _("Время на смену платы: 30 сек"),
                       _("Тестирующее напряжение до +/- 12 В"),
                       _("Чувствительность по R 2 Ом - 450 кОм"),
                       _("Чувствительность по C 300 пФ - 100 мкФ"),
                       _("Чувствительность по L от 270 мкГн"),
                       _("Предоставляются подложки для крепления BGA микросхем"),
                       _("Габариты и вес: 604х543х473 мм, 50 кг"),
                       _("Управляющий ПК: Intel i5 2.8 ГГц, 16 Гб RAM, 256 Гб SSD"),
                       _("Электропитание: ~220В, 300 Вт")
                       ]
            ),
    Product(name="EyePoint_S2", friendly_name=_("EyePoint S2"), picture="S2.png",
            description=_("Ручная версия локализатора неисправных электронных компонентов с сенсорным экраном."),
            extended_description=_("EyePoint S2 – второе поколение настольной системы для локализации неисправных "
                                   "электронных компонентов на печатных платах методом аналогового сигнатурного "
                                   "анализа.  Система обладает большим удобным сенсорным экраном, а дополнительная "
                                   "педаль позволит упростить управление системой. "
                                   "Для использования системы EyePoint  Вам необходима последняя версия драйвера. "
                                   "Предыдущие версии выложены для пользователей, которые не хотят переходить на новые версии. "),
            hilights=[_("Простой и легкий прибор"),
                      _("Частота зондирования до 100 кГц"),
                      _("Доступен план тестирования ")],
            technical=[_("Диапазон частот тестирующего сигнала: 1 Гц – 100 кГц"),
                       _("Рабочие напряжения: 1,2, 3,3, 5, 12 В"),
                       _("В зависимости от диапазона измеряемых значений максимальное напряжение до 12 В, "
                         "максимальный ток до 250 мкА"),
                       _("Габаритные размеры: 205 х 204 х 120 мм"),
                       _("7-ми дюймовый цветной дисплей с функцией touchscreen"),
                       _("Регулируемый порог совпадения сигнатур"),
                       _("Внешняя педаль для дополнительного функционала"),
                       _("Экспорт данных в формате данных PNG на внешний Flash накопитель"),
                       _("Поддержка режима «План тестирования»"),
                       _("Возможность подключения к ПК по USB (Win, Linux)"),
                       _("Возможность программного управления (C/C++, C#, Python)")
                       ]
            ),
    Product(name="EyePoint_u2", friendly_name=_("EyePoint u2"), picture="u2.png",
            description=_("EyePoint u2 – миниатюрная система для поиска неисправных электронных компонентов на "
                          "печатных платах методом аналогового сигнатурного анализа ASA. Для работы необходимо "
                          "подключить EyePoint u2 к компьютеру по USB и начать тестирование в ручном режиме."),
            extended_description=_("EyePoint u2 – миниатюрная система для поиска неисправных электронных компонентов "
                                   "на печатных платах методом аналогового сигнатурного анализа АСА. Для работы "
                                   "необходимо подключить EyePoint u2 к компьютеру по USB и начать тестирование в "
                                   "ручном режиме. Версии: u21 – одноканальная система, u22 – двухканальная система. "
                                   "Для использования системы EyePoint  Вам необходима последняя версия драйвера. "
                                   "Предыдущие версии выложены для пользователей, которые не хотят переходить на новые версии. "),
            hilights=[_("Частота зондирования до 100 кГц"),
                      _("Миниатюрные размеры"),
                      _("Доступен функционал старшей модели S2")],
            technical=[_("Метод тестирования: АСА"),
                       _("Диапазон частот тестирующего сигнала: 1 Гц – 100 кГц"),
                       _("Рабочие напряжения: 1.2, 3.3, 5, 12 В"),
                       _("Чувствительность по току: 250 мкА, 2.5 мА, 25 мА"),
                       _("Напряжение питания: 5 В"),
                       _("Габаритные размеры: 175 х 90 х 40 мм"),
                       _("Регулируемый порог совпадения сигнатур"),
                       _("Поддержка режима «План тестирования»"),
                       _("Интерфейс связи USB 2.0"),
                       _("Поддержка ОС: Windows 7/8/10 (х64/х86), Linux"),
                       _("Возможность программного управления: C#/C++, Qt, Python"),
                       _("В зависимости от диапазона измеряемых значений максимальное напряжение до 12 В, "
                         "максимальный ток до 250 мкА")
                       ]
            ),
    Product(name="EyePoint_a2", friendly_name=_("EyePoint a2"), picture="a2.png",
            description=_("Одноканальный OEM модуль аналогового сигнатурного анализа без корпуса и пользовательского "
                          "ПО."),
            extended_description=_("EyePoint a2 - ОЕМ модуль, предназначенный для поиска неисправных электронных "
                                   "компонентов на печатных платах методом аналогового сигнатурного анализа (АСА) с "
                                   "подключением к ПК по USB и возможностью составления плана тестирования. Для "
                                   "подключения щупов используется коаксиальный кабель с обязательным подключением "
                                   "экрана кабеля к заземляющим контактам со стороны платы. С модулем предоставляется "
                                   "доступ к API для разработки собственного программного обеспечения с "
                                   "использованием результатом измерения а2. "
                                   "Для использования системы EyePoint  Вам необходима последняя версия драйвера. "
                                   "Предыдущие версии выложены для пользователей, которые не хотят переходить на новые версии. "),
            hilights=[_("Открытый API"),
                      _("Полный функционал"),
                      _("Максимально доступный")],
            technical=[_("Метод тестирования: АСА"),
                       _("Диапазон частот тестирующего сигнала: 1 Гц – 100 кГц"),
                       _("Рабочие напряжения: 1.2, 3.3, 5, 12 В"),
                       _("Чувствительность по току: 250 мкА, 2.5 мА, 25 мА"),
                       _("Интерфейс подключения к ПК: USB 2.0"),
                       _("Возможность программного управления: С#/С++; Python"),
                       _("Габаритные размеры: 60х40х5 мм"),
                       _("Напряжение питания: 5 В"),
                       _("Питание от USB разъема")
                       ]
            )
)

assert(all([" " not in p.name for p in products]))


@lru_cache(maxsize=128)
def product_by_name(name: str) -> Product:
    for product in products:
        if product.name == name:
            return product
    raise ValueError("No such product ", name)

#, Python)") #/C++, Qt, Python"), #/С++; Python"),