"""営業品目コードおよび資格の種類の列挙型モジュール。

全省庁統一資格の営業品目コードと資格の種類を定義する。
"""

from __future__ import annotations

from enum import StrEnum


class QualificationType(StrEnum):
    """全省庁統一資格の種類の列挙型。

    物品の製造・販売、役務の提供等、物品の買受けの4種類を定義する。
    """

    物品の製造 = "manufacturing"
    物品の販売 = "sales"
    役務の提供等 = "services"
    物品の買受け = "purchase"


class BusinessItem(StrEnum):
    """全省庁統一資格の営業品目コードの列挙型。

    物品の製造(101-129)、物品の販売(201-229)、役務の提供等(301-315)、
    物品の買受け(401-402) の各品目を定義する。
    ``qualification_type`` プロパティで属する資格の種類を取得できる。
    """

    # 物品の製造 (101-129)
    衣服その他繊維製品類_製造 = "101"
    ゴム皮革プラスチック製品類_製造 = "102"
    窯業土石製品類_製造 = "103"
    非鉄金属金属製品類_製造 = "104"
    フォーム印刷_製造 = "105"
    その他印刷類_製造 = "106"
    図書類_製造 = "107"
    電子出版物類_製造 = "108"
    紙紙加工品類_製造 = "109"
    車両類_製造 = "110"
    その他輸送搬送機械器具類_製造 = "111"
    船舶類_製造 = "112"
    燃料類_製造 = "113"
    家具什器類_製造 = "114"
    一般産業用機器類_製造 = "115"
    電気通信用機器類_製造 = "116"
    電子計算機類_製造 = "117"
    精密機器類_製造 = "118"
    医療用機器類_製造 = "119"
    事務用機器類_製造 = "120"
    その他機器類_製造 = "121"
    医薬品医療用品類_製造 = "122"
    事務用品類_製造 = "123"
    土木建設建築材料_製造 = "124"
    警察用装備品類_製造 = "127"
    防衛用装備品類_製造 = "128"
    その他_製造 = "129"

    # 物品の販売 (201-229)
    衣服その他繊維製品類_販売 = "201"
    ゴム皮革プラスチック製品類_販売 = "202"
    窯業土石製品類_販売 = "203"
    非鉄金属金属製品類_販売 = "204"
    フォーム印刷_販売 = "205"
    その他印刷類_販売 = "206"
    図書類_販売 = "207"
    電子出版物類_販売 = "208"
    紙紙加工品類_販売 = "209"
    車両類_販売 = "210"
    その他輸送搬送機械器具類_販売 = "211"
    船舶類_販売 = "212"
    燃料類_販売 = "213"
    家具什器類_販売 = "214"
    一般産業用機器類_販売 = "215"
    電気通信用機器類_販売 = "216"
    電子計算機類_販売 = "217"
    精密機器類_販売 = "218"
    医療用機器類_販売 = "219"
    事務用機器類_販売 = "220"
    その他機器類_販売 = "221"
    医薬品医療用品類_販売 = "222"
    事務用品類_販売 = "223"
    土木建設建築材料_販売 = "224"
    警察用装備品類_販売 = "227"
    防衛用装備品類_販売 = "228"
    その他_販売 = "229"

    # 役務の提供等 (301-315)
    広告宣伝 = "301"
    写真製図 = "302"
    調査研究 = "303"
    情報処理 = "304"
    翻訳通訳速記 = "305"
    ソフトウェア開発 = "306"
    会場等の借り上げ = "307"
    賃貸借 = "308"
    建物管理等各種保守管理 = "309"
    運送 = "310"
    車両整備 = "311"
    船舶整備 = "312"
    電子出版 = "313"
    防衛用装備品類の整備 = "314"
    その他_役務 = "315"

    # 物品の買受け (401-402)
    立木竹 = "401"
    その他_買受け = "402"

    @property
    def qualification_type(self) -> QualificationType:
        """この品目が属する資格の種類を返す。

        Returns:
            営業品目コードに対応する資格の種類。
        """
        code = int(self.value)
        if code < 200:
            return QualificationType.物品の製造
        if code < 300:
            return QualificationType.物品の販売
        if code < 400:
            return QualificationType.役務の提供等
        return QualificationType.物品の買受け
