/**
 * ITU-R M.1371-6, табл. 51 — тип судна (идентификатор 0–99).
 * Подписи на русском по официальным формулировкам (сокращ.: ОПГ — опасные грузы;
 * ОН — опасные только насыпью; ВВ — вредные вещества; МЗ — морские загрязнители).
 */
(function () {
    'use strict';

    var LABELS = [
        'Не указано',
        'Научно-исследовательское судно',
        'Учебное судно',
        'Судно, принадлежащее или эксплуатируемое государственным органом',
        'Ледокол',
        'Судно обслуживания буёв (навигационных знаков)',
        'Кабелеукладчик',
        'Трубоукладчик',
        'Зарезервировано (на будущее)',
        'Судно специального назначения, дополнительные сведения не указаны',
        'Зарезервировано (на будущее)',
        'Судно FPSO (добыча, хранение и отгрузка нефти на месторождении)',
        'Рыбозавод (плавучий рыбоперерабатывающий завод)',
        'Судно обеспечения рыбоводческого хозяйства',
        'Судно оффшорного обеспечения и т. п.',
        'Зарезервировано (на будущее)',
        'Зарезервировано (на будущее)',
        'Судно для строительных работ',
        'Катер доставки экипажа (crew boat)',
        'Судно обеспечения, дополнительные сведения не указаны',
        'Судно на воздушной подушке (WIG), все суда этого типа',
        'WIG с ОПГ и/или ОН, ВВ или МЗ, категория опасности X (ИМО)',
        'WIG с ОПГ и/или ОН, ВВ или МЗ, категория опасности Y (ИМО)',
        'WIG с ОПГ и/или ОН, ВВ или МЗ, категория опасности Z (ИМО)',
        'WIG с ОПГ и/или ОН, ВВ или МЗ, категория OS (ИМО)',
        'Зарезервировано (на будущее)',
        'Зарезервировано (на будущее)',
        'Зарезервировано (на будущее)',
        'Зарезервировано (на будущее)',
        'WIG, дополнительные сведения не указаны',
        'Рыболовное судно',
        'Буксир',
        'Буксир; длина буксира >200 м или ширина >25 м',
        'Земснаряд',
        'Водолазное судно',
        'Военный корабль или вспомогательное судно ВМС',
        'Парусное судно',
        'Прогулочное моторное судно',
        'Тральщик',
        'Патрульное судно',
        'Высокоскоростное судно (ВСС), все суда этого типа',
        'ВСС с ОПГ и/или ОН, ВВ или МЗ, категория X (ИМО)',
        'ВСС с ОПГ и/или ОН, ВВ или МЗ, категория Y (ИМО)',
        'ВСС с ОПГ и/или ОН, ВВ или МЗ, категория Z (ИМО)',
        'ВСС с ОПГ и/или ОН, ВВ или МЗ, категория OS (ИМО)',
        'ВСС, перевозка пассажиров',
        'ВСС Ro-Ro (автомобили / ж/д)',
        'Зарезервировано (на будущее)',
        'Зарезервировано (на будущее)',
        'ВСС, дополнительные сведения не указаны',
        'Лоцманское судно',
        'Поисково-спасательное судно',
        'Буксиры',
        'Портовое или рыболовное вспомогательное судно',
        'Противозагрязнение или пожарный резерв',
        'Судно правоохранительных органов',
        'Резерв 1 — для назначений местным судам',
        'Резерв 2 — для назначений местным судам',
        'Медицинский транспорт (Женевские конвенции 1949 г. и Доп. протоколы)',
        'Судна государств, не участвующих в вооружённом конфликте',
        'Пассажирское судно, все суда этого типа',
        'Пассажирское с ОПГ и/или ОН, ВВ или МЗ, категория X (ИМО)',
        'Пассажирское с ОПГ и/или ОН, ВВ или МЗ, категория Y (ИМО)',
        'Пассажирское с ОПГ и/или ОН, ВВ или МЗ, категория Z (ИМО)',
        'Пассажирское с ОПГ и/или ОН, ВВ или МЗ, категория OS (ИМО)',
        'Пассажирский лайнер (круизное судно)',
        'Пассажирский паром',
        'Пассажирское прогулочное (напр. по гавани, наблюдение за китами)',
        'Зарезервировано (на будущее)',
        'Пассажирское судно, дополнительные сведения не указаны',
        'Грузовое судно, все суда этого типа',
        'Грузовое с ОПГ и/или ОН, ВВ или МЗ, категория X (ИМО)',
        'Грузовое с ОПГ и/или ОН, ВВ или МЗ, категория Y (ИМО)',
        'Грузовое с ОПГ и/или ОН, ВВ или МЗ, категория Z (ИМО)',
        'Грузовое с ОПГ и/или ОН, ВВ или МЗ, категория OS (ИМО)',
        'Грузовое судно, балкер',
        'Грузовое судно, контейнеровоз',
        'Грузовое судно, Ro-Ro',
        'Грузовое судно, десантная баржа',
        'Грузовое судно, дополнительные сведения не указаны',
        'Танкер, все суда этого типа',
        'Танкер с ОПГ и/или ОН, ВВ или МЗ, категория X (ИМО)',
        'Танкер с ОПГ и/или ОН, ВВ или МЗ, категория Y (ИМО)',
        'Танкер с ОПГ и/или ОН, ВВ или МЗ, категория Z (ИМО)',
        'Танкер с ОПГ и/или ОН, ВВ или МЗ, категория OS (ИМО)',
        'Танкер, неопасный груз / не загрязняющий',
        'Составной буксир и танкерная баржа (A–D — буксир и баржа)',
        'Зарезервировано (на будущее)',
        'Зарезервировано (на будущее)',
        'Танкер, дополнительные сведения не указаны',
        'Прочий тип судна',
        'Прочий тип с ОПГ и/или ОН, ВВ или МЗ, категория X (ИМО)',
        'Прочий тип с ОПГ и/или ОН, ВВ или МЗ, категория Y (ИМО)',
        'Прочий тип с ОПГ и/или ОН, ВВ или МЗ, категория Z (ИМО)',
        'Прочий тип с ОПГ и/или ОН, ВВ или МЗ, категория OS (ИМО)',
        'Зарезервировано (на будущее)',
        'Зарезервировано (на будущее)',
        'Зарезервировано (на будущее)',
        'Зарезервировано (на будущее)',
        'Прочий тип судна, дополнительные сведения не указаны',
    ];

    var GROUPS = [
        { from: 1, to: 9, title: '01–09 Судно специального назначения' },
        { from: 10, to: 19, title: '10–19 Судно обеспечения' },
        { from: 20, to: 29, title: '20–29 Судно на воздушной подушке (WIG)' },
        { from: 30, to: 39, title: '30–39 Особое судно' },
        { from: 40, to: 49, title: '40–49 Высокоскоростное судно (ВСС)' },
        { from: 50, to: 59, title: '50–59 Особое судно' },
        { from: 60, to: 69, title: '60–69 Пассажирское судно' },
        { from: 70, to: 79, title: '70–79 Грузовое судно' },
        { from: 80, to: 89, title: '80–89 Танкер' },
        { from: 90, to: 99, title: '90–99 Прочие типы' },
    ];

    function addOption(sel, value, text) {
        var o = document.createElement('option');
        o.value = String(value);
        o.textContent = String(value) + ' — ' + text;
        sel.appendChild(o);
    }

    function fillShipTypeSelect() {
        var sel = document.getElementById('tp-ship-type');
        if (!sel || sel.getAttribute('data-table51') === '1') return;
        sel.setAttribute('data-table51', '1');
        sel.innerHTML = '';
        addOption(sel, 0, LABELS[0]);
        GROUPS.forEach(function (g) {
            var og = document.createElement('optgroup');
            og.label = g.title;
            for (var c = g.from; c <= g.to; c++) {
                var o = document.createElement('option');
                o.value = String(c);
                var pad = c < 10 ? '0' + c : String(c);
                o.textContent = pad + ' — ' + LABELS[c];
                og.appendChild(o);
            }
            sel.appendChild(og);
        });
    }

    function ensureShipTypeOption(value) {
        var sel = document.getElementById('tp-ship-type');
        if (!sel) return;
        var v = Math.max(0, Math.min(255, parseInt(value, 10) || 0));
        var s = String(v);
        for (var i = 0; i < sel.options.length; i++) {
            if (sel.options[i].value === s) return;
        }
        var o = document.createElement('option');
        o.value = s;
        o.textContent = s + ' — (из конфигурации, вне табл. 51 / 0–99)';
        sel.appendChild(o);
    }

    window.fillShipTypeSelect = fillShipTypeSelect;
    window.ensureShipTypeOption = ensureShipTypeOption;
    window.AIS_TABLE51_SHIP_TYPE_LABEL = function (code) {
        var c = parseInt(code, 10);
        if (isNaN(c) || c < 0 || c > 99) return null;
        return LABELS[c] || null;
    };

    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', fillShipTypeSelect);
    } else {
        fillShipTypeSelect();
    }
})();
