# Copyright 2025 Yuhui. All rights reserved.
#
# Licensed under the GNU General Public License, Version 3.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.gnu.org/licenses/gpl-3.0.html
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Data.gov.sg custom types for Economy client methods' responses."""

from datetime import date
from typing import NotRequired
try:
    from typing import TypedDict
except ImportError:
    TypedDict = dict

# Common types

class _CodeDescriptionDict(TypedDict):
    """Type definition for various custom types"""

    code: str
    """Code."""
    description: str
    """Description."""

class _CodeNameAddressCountryDict(TypedDict):
    """Type definition for various custom types"""

    code: str
    """Code."""
    name: str
    """Name."""
    address: str
    """Address."""
    countryOfIncorporation: str
    """Country of incorporation."""

# Designs

class _DesignsApplicationSummaryDict(TypedDict):
    """Type definition for _DesignsApplicationDict"""

    applicationNum: str
    """System number that auto generated which is unique to represent a DS \
        application number.
    """
    filingDate: date
    """Date that national application is filed/ Given by WIPO for IR case."""
    classSubClass: str
    """Classification Code & Classification sub code."""
    status: str
    """IP status for a design."""
    approvedDate: date
    """Approved Date."""
    ukDesignNum: str
    """Unique number to represent a UK design application number."""
    ukRegistrationDate: date
    """Registration date of a UK design number."""
    internationalRegistrationNum: str
    """International Registration number."""
    internationalRegistrationDate: date
    """Filing date for the international registration application."""
    renewalDueDate: date
    """When renewal had been filed, this field will be updated to the renewal \
        date. Let's say for for the first renewal, it is the date after 5 \
        years of filing date.
    """
    expiryDate: date
    """25 years after filing date. The particular design will be expired \
        after this date. It consider a non-live design.
    """
    lodgementDate: date
    """Date that form get lodge regardless if fall in holiday or excluded \
        date.
    """

class _DesignsApplicationApplicantArticleDict(TypedDict):
    """Type definition for _DesignsApplicationApplicantDict"""

    numOfArticlesInSet: int
    """Number of articles in the set."""
    articleName: str
    """Article Name."""

class _DesignsApplicationApplicantDict(TypedDict):
    """Type definition for _DesignsApplicationDict"""

    uenCompanyCode: str
    """UEN/Company Code generated by system/assigned by officer."""
    name: str
    """Name of applicant."""
    address: str
    """Address of applicant."""
    countryOfIncorporationOrResidence: _CodeDescriptionDict
    """Country of Incorporation/Residence."""
    stateOfIncorporation: _CodeDescriptionDict
    """State of Incorporation."""
    nationality: _CodeDescriptionDict
    """Nationality."""
    soleproprietorPartnerName: str
    """Sole Proprietor or Partner's Name."""
    articles: list[_DesignsApplicationApplicantArticleDict]
    """Articles."""

class _DesignsApplicationDict(TypedDict):
    """Type definition for DesignsDict"""

    summary: _DesignsApplicationSummaryDict
    """Summary."""
    applicants: list[_DesignsApplicationApplicantDict]
    """Applicants."""

class DesignsDict(TypedDict):
    """Type definition for designs()"""

    lodgement_date: date
    """Date of lodgement of application from IPOS."""
    count: int
    """Count."""
    applications: NotRequired[list[_DesignsApplicationDict]]
    """Applications."""
    items: NotRequired[list[_DesignsApplicationDict]]
    """Items."""

# Patents

class _PatentsApplicationSummaryDict(TypedDict):
    """Type definition for _PatentsApplicationDict"""

    applicationNum: str
    """System number that auto generated which is unique to represent a patent \
        application number.
    """
    applicationStatus: str
    """IP status for a patent. The code desciption is store in code table."""
    applicationType: str
    """Type of the application filed in singapore."""
    filingDate: date
    """FilingDate."""
    lodgementDate: date
    """Lodgement Date of the Request."""
    titleOfInvention: str
    """Title of Invention."""
    ipc: str
    """IPC Symbol."""
    dateofPublication: date
    """Date of the Application Section 27 Publication date."""
    publicationPatentNumForOldApplication: str
    """Publication Patent Num for old application Legacy Data Number (assigned \
        after grant).
    """

class _PatentsApplicationInventorDict(TypedDict):
    """Type definition for _PatentsApplicationDict"""

    name: str
    """Name of Inventor."""
    address: str
    """Inventor address, address details is stored in CM.Address table, link \
        with CM.Address.Id.
    """
    countryOfResidence: _CodeDescriptionDict
    """Country of residence."""
    nationality: str
    """Nationality."""

class _PatentsApplicationApplicantDict(TypedDict):
    """Type definition for _PatentsApplicationDict"""

    uenCompanyCode: str
    """Code generated by system/assign by officer."""
    name: str
    """Name of applicant."""
    address: str
    """Applicant address."""
    countryOfIncorporationOrResidence: _CodeDescriptionDict
    """Country of incorporation or residence."""
    stateOfIncorporation: _CodeDescriptionDict
    """State of incorporation."""
    nationality: _CodeDescriptionDict
    """Nationality."""
    soleProprietorPartnerName: str
    """Name of Partner."""

class _PatentsApplicationAgentCorrespondenceDetailAgentDict(TypedDict):
    """Type definition for \
        _PatentsApplicationAgentCorrespondenceDetailDict
    """

    uenCompanyCode: str
    """UEN/Agent code."""
    name: str
    """Agent name."""

class _PatentsApplicationAgentCorrespondenceDetailDict(TypedDict):
    """Type definition for _PatentsApplicationDict"""

    representationType: str
    """indicator to represent if represent as an agent."""
    agent: _PatentsApplicationAgentCorrespondenceDetailAgentDict
    actionRepresenting: str
    """Agent represent for which action."""
    representativeName: str
    """Representative/care off name."""
    addressForServiceInSingapore: str
    """Agent address."""

class _PatentsApplicationDeclarationOfPriorityDict(TypedDict):
    """Type definition for _PatentsApplicationDict"""

    applicationNum: str
    """Application numberPriorityApplnNum."""
    country: _CodeDescriptionDict
    """Country."""
    filingDate: date
    """PriorityFilingDate."""

class _PatentsApplicationGrantAndRenewalDict(TypedDict):
    """Type definition for _PatentsApplicationDict"""

    grantDate: date
    """Grant Date."""
    nextRenewalDate: date
    """Next Renewal Due date."""
    dateOfRenewal: date
    """PF15/PF53."""
    dateOfLastRenewal: date
    """Renewal Record date."""
    yearOfLastRenewal: str
    """Renewal Record year."""
    expiryDate: date
    """Expiry date."""
    divisionalParentofUKEUPatentNum: str
    """This is applicable to pre 1996 applications. This is identical to XUK \
        No. from Staff portal IP Master.
    """
    dateOfGrantOfUKEUPatentNum: date
    """This is applicable to pre 1996 applications. This is identical to XUK \
        No. from Staff portal IP Master.
    """
    dateOfIssueOfCertificateOfRegistrationInSingapore: date
    """This is applicable to pre 1996 applications.  This is identical to \
        “Grant Date” from Staff portal IP Master.
    """

class _PatentsApplicationDivisionalApplicationDict(TypedDict):
    """Type definition for _PatentsApplicationDict"""

    divisionalApplicationNum: str
    """Application number for divisional application."""
    divisionalApplicationLodgementDate: date
    """Application Lodgement Date."""
    parentApplicationNum: str
    """Applicable for Divisional Application."""
    parentFilingDateForDivisional: date
    """Applicable for Divisional Application."""

class _PatentsApplicationPCTApplicationPCTPriorityClaimedDict(TypedDict):
    """Type definition for _PatentsApplicationPCTApplicationDict"""

    applicationNum: str
    """Application number."""
    country: _CodeDescriptionDict
    filingDate: date
    """Filing date."""

class _PatentsApplicationPCTApplicationDict(TypedDict):
    """Type definition for _PatentsApplicationDict"""

    PCTApplicationNum: str
    """PCT Application Num."""
    PCTPublicationNum: str
    """Publication date of PCTPublication number of WIPO application."""
    PCTPublicationDate: date
    """Publication Date that WIPO published the application."""
    PCTEntryDate: date
    """PF37 Lodgement Date."""
    dateOfPublicationOfEntryIntoNationalPhase: date
    """Journal Date of Bibliographic Publication."""
    PCTPriorityClaimed: \
        list[_PatentsApplicationPCTApplicationPCTPriorityClaimedDict]

class _PatentsApplicationHMGStatusDict(TypedDict):
    """Type definition for _PatentsApplicationDict"""

    caseNum: str
    """Case number."""
    lodgeDate: date
    """Lodge date."""
    caseStatus: _CodeDescriptionDict
    """Case status."""
    caseType: _CodeDescriptionDict
    """Case type."""

class _PatentsApplicationHOtherEntryEventsDict(TypedDict):
    """Type definition for _PatentsApplicationHOtherEntryDict"""

    code: str
    """Evemt code."""
    description: str
    """Event description."""
    eventDate: date
    """Event date."""

class _PatentsApplicationHOtherEntryDict(TypedDict):
    """Type definition for _PatentsApplicationDict"""

    evemts: _PatentsApplicationHOtherEntryEventsDict
    """Events."""

class _PatentsApplicationLicenseParticularsOfLicensorLicenseeeDict(TypedDict):
    """Type definition for _PatentsApplicationLicenseDict"""

    licensorlicenseeName: str
    """Licensor / Licensee name."""
    licensorlicenseeCode: str
    """Licensor / Licensee code."""
    address: str
    """Address."""

class _PatentsApplicationLicenseDict(TypedDict):
    """Type definition for _PatentsApplicationDict"""

    isLicensor: bool
    """Is licensor."""
    particularsOfLicensorLicensee: \
        _PatentsApplicationLicenseParticularsOfLicensorLicenseeeDict
    licenseType: str
    """Licensee types."""
    licenseStartDate: date
    """License start date."""
    licenseEndDate: date
    """License end date."""
    detailsOfLicenceToBeRegisteredAmendedOrTerminated: str
    """Details of  license to be registered, amended or terminated."""
    licenseReferenceNum: str
    """License Reference Number."""

class _PatentsApplicationSecurityInterestGrantorParticularsDict(TypedDict):
    """Type definition for _PatentsApplicationSecurityInterestDict"""

    grantorName: str
    """Grantor name."""
    grantorAddress: str
    """Grantor address."""

class _PatentsApplicationSecurityInterestDict(TypedDict):
    """Type definition for _PatentsApplicationDict"""

    securityInterestRefNum: str
    """Security interest reference number."""
    lodgementDate: date
    """Lodgement date."""
    grantorParticulars: list[
        _PatentsApplicationSecurityInterestGrantorParticularsDict
    ]
    """Grantor particulars."""
    securityInterestDetails: str
    """Details of Security Interest to be Registered, Amended or Terminated."""

class _PatentsApplicationTransferOfOwnershipDict(TypedDict):
    """Type definition for _PatentsApplicationDict"""

    currentApplicantProprietorDetails: _CodeNameAddressCountryDict
    """Current applicant proprietor details."""
    subsequentApplicantProprietorDetails: _CodeNameAddressCountryDict
    """Subsequent applicant proprietor details."""
    dateOfTranferOfOwnership: date
    """Date of Transfer of Ownership."""

class _PatentsApplicationRupkaDict(TypedDict):
    """Type definition for _PatentsApplicationDict"""

    xPatentNum: str
    """Applicable for migrated data only."""
    xukNum: str
    """Applicable for migrated data only."""
    xukrantDate: date
    """Applicable for migrated data only."""
    xGazetteNum: str
    """Applicable for migrated data only."""
    xGazetteDate: date
    """Applicable for migrated data only."""
    xIsSection261c: bool
    """Applicable for migrated data only."""

class _PatentsApplicationDocumentDict(TypedDict):
    """Type definition for _PatentsApplicationDict"""

    lodgementDate: date
    """Date of lodgement."""
    fileId: str
    """ID of file."""
    fileName: str
    """Name of file."""
    fileUrl: str
    """Url of file."""
    docType: _CodeDescriptionDict
    """Doc type."""

class _PatentsApplicationDict(TypedDict):
    """Type definition for PatentsDict"""

    summary: _PatentsApplicationSummaryDict
    """Summary."""
    inventors: list[_PatentsApplicationInventorDict]
    """Inventors."""
    applicant: list[_PatentsApplicationApplicantDict]
    """Applicant."""
    agentCorrespondenceDetails: \
        list[_PatentsApplicationAgentCorrespondenceDetailDict]
    """Agent correspondence detalis."""
    declarationOfPriority: list[_PatentsApplicationDeclarationOfPriorityDict]
    """Declaration of priority."""
    grantAndRenewal: _PatentsApplicationGrantAndRenewalDict
    """Grant and renewal."""
    divisionalApplications: list[_PatentsApplicationDivisionalApplicationDict]
    """Divisional applications."""
    PCTApplication: list[_PatentsApplicationPCTApplicationDict]
    """PCT application."""
    hmgStatus: list[_PatentsApplicationHMGStatusDict]
    """HMG status."""
    otherEntries: list[_PatentsApplicationHOtherEntryDict]
    """Other entries."""
    license: list[_PatentsApplicationLicenseDict]
    """License."""
    securityInterest: list[_PatentsApplicationSecurityInterestDict]
    """Security interest."""
    transferOfOwnership: list[_PatentsApplicationTransferOfOwnershipDict]
    """Transfer of ownership."""
    rupka: list[_PatentsApplicationRupkaDict]
    """Rupka."""
    documents: list[_PatentsApplicationDocumentDict]
    """Documents."""

class PatentsDict(TypedDict):
    """Type definition for patents()"""

    lodgement_date: date
    """Date of lodgement of application from IPOS.

    :example: date(2025, 1, 12, tzinfo=zoneinfo.ZoneInfo(key='Asia/Singapore'))
    """
    count: int
    """Count."""
    applications: NotRequired[list[_PatentsApplicationDict]]
    """Applications."""
    items: NotRequired[list[_PatentsApplicationDict]]
    """Items."""

# Trademarks

class _TrademarksApplicationSummaryJournalDict(TypedDict):
    """Type definition for _TrademarksApplicationSummaryDict"""

    journalNum: str
    """Auto generated."""
    journalDate: date
    """Date that journal is published."""
    journalStatus: _CodeDescriptionDict

class _TrademarksApplicationSummaryDict(TypedDict):
    """Type definition for _TrademarksApplicationDict"""

    applicationNum: str
    """System number that auto generated which is unique to represent a TM \
        application number.
    """
    filingDate: date
    """Date that national application is filed/ Given by WIPO for IR case."""
    internationalRegDate: date
    """Date of International Registration given by WIPO."""
    singaporeProtectionDate: date
    """Given by WIPO for IR case."""
    journals: list[_TrademarksApplicationSummaryJournalDict]
    """Journals."""

class _TrademarksApplicationInternationalRegistrationDesignatingSingaporeDetailsDict(
    TypedDict
):
    """Type definition for _TrademarksApplicationDict"""

    irNum: str
    """IR Number given by WIPO."""
    irDate: date
    """Given by WIPO."""
    irNotificationDate: date
    """Date that the IR was notified to Singapore."""
    subsequentDesignationNum: int
    """Auto generated number for each subsequent designation."""
    subsequentDesignationDate: date
    """Date of Subsequent Designation (given by WIPO)."""
    subesequentDesignationNotificationDate: date
    """Date that the IR was notified to Singapore."""

class _TrademarksApplicationInternationalApplicationDetailsDict(TypedDict):
    """Type definition for _TrademarksApplicationDict"""

    IANum: str
    """System number that auto generated which is unique to represent an IA \
        number.
    """
    IRNum: str
    """IR Number given by WIPO."""

class _TrademarksApplicationGoodsAndServicesSpecificationsDict(TypedDict):
    """Type definition for _TrademarksApplicationDict"""

    goodsServices: str
    """Goods/Services."""
    classNum: str
    """01-45."""
    classStatus: _CodeDescriptionDict
    """Class Status."""

class _TrademarksApplicationPriorityClaimsDetailsDict(TypedDict):
    """Type definition for _TrademarksApplicationDict"""

    goodsAndServices: str
    """Good and Services."""
    classNum: str
    """Class No."""
    priorityClaimsDate: date
    """Date when the priority is claimed."""
    country: str
    """Country."""

class _TrademarksApplicationTransformationApplicationMadridFromDict(TypedDict):
    """Type definition for _TrademarksApplicationDict"""

    applicationNum: str
    """Application Number."""
    irNum: str
    """IR Number given by WIPO."""

class _TrademarksApplicationTransformationApplicationMadridIntoDict(TypedDict):
    """Type definition for _TrademarksApplicationDict"""

    applicationNum: str
    """Application Number."""
    classNum: str
    """01-45."""
    dateOfProtection: date
    """Given by WIPO for IR case."""

class _TrademarksApplicationReplacementApplicationMadridByDict(TypedDict):
    """Type definition for _TrademarksApplicationDict"""

    applicationNum: str
    """Application Number."""
    irNum: str
    """IR Number given by WIPO."""
    classNum: str
    """01-45."""

class _TrademarksApplicationReplacementApplicationMadridReplacesDict(TypedDict):
    """Type definition for _TrademarksApplicationDict"""

    applicationNum: str
    """Application Number."""
    dateOfProtection: date
    """Given by WIPO for IR case."""
    classNum: str
    """01-45."""
    goodsServices: str
    """Affected goods and/or services."""
    expiryDate: date | str
    """Date that the application is expired."""
    publicationDate: date
    """Date that the application is published."""
    priorityClaimsDetails: list[
        _TrademarksApplicationPriorityClaimsDetailsDict
    ]
    """Priority Claims Details."""

class _TrademarksApplicationMarkClausesDict(TypedDict):
    """Type definition for _TrademarksApplicationDict"""

    value: str
    """Value."""

class _TrademarksApplicationMarkIndexDict(TypedDict):
    """Type definition for _TrademarksApplicationDict"""

    wordsInMark: str
    """Words in Mark entered by Mark Index Officer."""
    descrOfDevice: str
    """Device description entered by Mark Index Officer."""
    enTransliteration: str
    """English Translation entered by Mark Index Officer.."""
    enTranslation: str
    """English Translation entered by Mark Index Officer."""

class _TrademarksApplicationCurrentApplicantProprietorDetailsDict(TypedDict):
    """Type definition for _TrademarksApplicationDict"""

    applicantType: _CodeDescriptionDict
    """Type of applicant."""
    uenCompanyCode: str
    """UEN/Company Code generated by system/assigned by officer."""
    name: str
    """Name of applicant."""
    address: str
    """Address of applicant."""
    countryOfIncorporationOrResidence: _CodeDescriptionDict
    """Country of Incorporation/Residence."""
    stateOfIncorporation: _CodeDescriptionDict
    """State of Incorporation."""
    nationality: _CodeDescriptionDict
    """Nationality."""
    soleproprietorPartnerName: str
    """Sole Proprietor or Partner's Name."""

class _TrademarksApplicationAgentCorrespondenceDetailsAgentDict(TypedDict):
    """Type definition for _TrademarksApplicationDict"""

    uenCompanyCode: str
    """Agent UEN/ Company Code."""
    name: str
    """Agent Name."""

class _TrademarksApplicationAgentCorrespondenceDetailsDict(TypedDict):
    """Type definition for _TrademarksApplicationDict"""

    representationType: str
    """indicator to represent if represent as an agent."""
    actionRepresenting: str
    """Agent represent for which action."""
    representativeName: str
    """Representative or C/O Name."""
    addressForServiceInSingapore: str
    """Agent address."""
    agent: _TrademarksApplicationAgentCorrespondenceDetailsAgentDict

class _TrademarksApplicationHMGCasesDict(TypedDict):
    """Type definition for _TrademarksApplicationDict"""

    caseNum: str
    """HMG case number that are auto generated which is unique to represent a HMG case."""
    caseType: _CodeDescriptionDict
    """Case Type."""
    caseStatus: _CodeDescriptionDict
    """Opposition Status (Case Status) - Current Status of the case. E.g. Pending Successfully, pending appeal period.."""
    classNum: str
    """Class number being opposed."""
    lodgeDate: date
    """Lodge date."""

class _TrademarksApplicationLogogramArticle6TerDetailsDict(TypedDict):
    """Type definition for _TrademarksApplicationDict"""

    applicationNum: str
    """Application Number - System generated."""
    applicationStatus: str
    """Application Status."""
    lodgementDate: date
    """Date that logogram is sent to IPOS."""
    name: str
    """Organization Name."""
    address: str
    """Organization Address."""

class _TrademarksApplicationLicenseParticularsOfLicensorLicenseeDict(TypedDict):
    """Type definition for _TrademarksApplicationLicenseDict"""

    licensorlicenseeName: str
    """Licensor / Licensee name."""
    licensorlicenseeCode: str
    """Licensor / Licensee code."""
    address: str
    """Address."""
    representationType: _CodeDescriptionDict
    """Representation type."""
    incorporationCountry: _CodeDescriptionDict
    """Incorporation country."""
    residenceCountry: _CodeDescriptionDict
    """Residence country."""
    detailsOfLicense: str
    """Details of license."""
    licenseType: str
    """License Type (Exclusive or Non-Exclusive License)."""
    licenseStartDate: date
    """Licence Start Date."""
    licenseEndDate: date
    """License End Date."""
    licenseDetails: str
    """Details of license to be registered, amended or terminated."""
    licenseRefNum: str
    """Security interest ref. number."""

class _TrademarksApplicationLicenseDict(TypedDict):
    """Type definition for _TrademarksApplicationDict"""

    isLicensor: bool
    """Licensor if value is true."""
    isLicenseAgainstAllGoodsServices: bool
    """License to be recorded against all goods and/or services."""
    particularsOfLicensorLicensee: \
        _TrademarksApplicationLicenseParticularsOfLicensorLicenseeDict
    """Particulars of Licensor/Licensee."""

class _TrademarksApplicationSecurityInterestGrantorParticularsDict(TypedDict):
    """Type definition for _TrademarksApplicationSecurityInterestDict"""

    grantorName: str
    """Grantor name."""
    grantorAddress: str
    """Grantor address."""

class _TrademarksApplicationSecurityInterestGranteeParticularsDict(TypedDict):
    """Type definition for _TrademarksApplicationSecurityInterestDict"""

    granteeName: str
    """Grantee name."""
    granteeAddress: str
    """Grantee address."""

class _TrademarksApplicationSecurityInterestDict(TypedDict):
    """Type definition for _TrademarksApplicationDict"""

    securityInterestRefNum: str
    """Security interest reference number."""
    lodgementDate: date
    """Lodgement date."""
    grantorParticulars: list[
        _TrademarksApplicationSecurityInterestGrantorParticularsDict
    ]
    """Grantor particulars."""
    granteeParticulars: list[
        _TrademarksApplicationSecurityInterestGranteeParticularsDict
    ]
    """Grantee particulars."""
    securityInterestDetails: str
    """Details of Security Interest to be Registered, Amended or Terminated."""

class _TrademarksApplicationTransferOfOwnershipDict(TypedDict):
    """Type definition for _TrademarksApplicationDict"""

    currentApplicantProprietorDetails: _CodeNameAddressCountryDict
    """Details of Current Applicant/ Proprietor."""
    subsequentApplicantProprietorDetails: _CodeNameAddressCountryDict
    """Details of Subsequent Applicant/ Proprietor."""
    dateOfTransferOfOwnership: date
    """Date of Transfer of Ownership."""
    detailsOfTransferOfOwnershipToBeRegistered: str
    """Details of Transfer of Ownership to be Registered."""
    fullOrPartial: str
    """Full/Partial transfer of ownership."""

class _TrademarksApplicationDocumentDict(TypedDict):
    """Type definition for _TrademarksApplicationDict"""

    lodgementDate: date
    """Date of lodgement."""
    fileUrl: str
    """Url of file."""
    docType: _CodeDescriptionDict
    """Doc type."""

class _TrademarksApplicationDict(TypedDict):
    """Type definition for TrademarksDict"""

    summary: _TrademarksApplicationSummaryDict
    """Summary."""
    internationalRegistrationDesignatingSingaporeDetails: \
        _TrademarksApplicationInternationalRegistrationDesignatingSingaporeDetailsDict
    """International registration designating Singapore details."""
    internationalApplicationDetails: \
        _TrademarksApplicationInternationalApplicationDetailsDict
    """International application details."""
    goodsAndServicesSpecifications: \
        _TrademarksApplicationGoodsAndServicesSpecificationsDict
    """Specification of Goods/Services."""
    priorityClaimsDetails: _TrademarksApplicationPriorityClaimsDetailsDict
    """Priority Claims Details."""
    transformationApplicationMadridFrom: list[
        _TrademarksApplicationTransformationApplicationMadridFromDict
    ]
    """Transformation Application under Madrid Protocol."""
    transformationApplicationMadridInto: list[
        _TrademarksApplicationTransformationApplicationMadridIntoDict
    ]
    """Transformation Application under Madrid Protocol."""
    replacementApplicationMadridBy: list[
        _TrademarksApplicationReplacementApplicationMadridByDict
    ]
    """Replacement Application under Madrid Protocol."""
    replacementApplicationMadridReplaces: list[
        _TrademarksApplicationReplacementApplicationMadridReplacesDict
    ]
    """Replacement Application under Madrid Protocol."""
    markClauses: list[_TrademarksApplicationMarkClausesDict]
    """Mark Clauses entered by Examiners."""
    markIndex: _TrademarksApplicationMarkIndexDict
    """Mark Index."""
    currentApplicantProprietorDetails: list[
        _TrademarksApplicationCurrentApplicantProprietorDetailsDict
    ]
    """Current Applicant/Proprietor Details."""
    agentCorrespondenceDetails: list[
        _TrademarksApplicationAgentCorrespondenceDetailsDict
    ]
    """Agent/Correspondence Details."""
    HMGcases: list[_TrademarksApplicationHMGCasesDict]
    """HMG cases."""
    logogramArticle6TerDetails: list[
        _TrademarksApplicationLogogramArticle6TerDetailsDict
    ]
    """Logogram/ Article 6 Ter Details."""
    license: list[_TrademarksApplicationLicenseDict]
    """License."""
    securityInterest: _TrademarksApplicationSecurityInterestDict
    """Security interest."""
    transferOfOwnership: list[
        _TrademarksApplicationTransferOfOwnershipDict
    ]
    """Transfer of Ownership."""
    documents: list[_TrademarksApplicationDocumentDict]
    """Documents."""

class TrademarksDict(TypedDict):
    """Type definition for trademarks()"""

    lodgement_date: date
    """Date of lodgement of application from IPOS.

    :example: date(2025, 1, 12, tzinfo=zoneinfo.ZoneInfo(key='Asia/Singapore'))
    """
    count: int
    """Count."""
    applications: NotRequired[list[_TrademarksApplicationDict]]
    """Applications."""
    items: NotRequired[list[_TrademarksApplicationDict]]
    """Items."""

__all__ = [
    'DesignsDict',
    'PatentsDict',
    'TrademarksDict',
]
