# -*- coding: utf-8 -*-

# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# 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.
#

import proto  # type: ignore


from google.cloud.talent_v4beta1.types import common
from google.protobuf import timestamp_pb2 as timestamp  # type: ignore
from google.protobuf import wrappers_pb2 as wrappers  # type: ignore
from google.type import date_pb2 as date  # type: ignore
from google.type import postal_address_pb2 as postal_address  # type: ignore


__protobuf__ = proto.module(
    package="google.cloud.talent.v4beta1",
    manifest={
        "Profile",
        "AvailabilitySignal",
        "Resume",
        "PersonName",
        "Address",
        "Email",
        "Phone",
        "PersonalUri",
        "AdditionalContactInfo",
        "EmploymentRecord",
        "EducationRecord",
        "Degree",
        "Activity",
        "Publication",
        "Patent",
    },
)


class Profile(proto.Message):
    r"""A resource that represents the profile for a job candidate
    (also referred to as a "single-source profile").

    Attributes:
        name (str):
            Required during profile update.

            Resource name assigned to a profile by the API.

            The format is
            "projects/{project_id}/tenants/{tenant_id}/profiles/{profile_id}",
            for example, "projects/foo/tenants/bar/profiles/baz".
        external_id (str):
            Profile's id in client system, if available. This value is
            unique for each profile inside a tenant. An error is thrown
            if another profile with the same external_id is created.

            The maximum number of bytes allowed is 100.
        source (str):
            The source description indicating where the
            profile is acquired.
            For example, if a candidate profile is acquired
            from a resume, the user can input "resume" here
            to indicate the source.

            The maximum number of bytes allowed is 100.
        uri (str):
            The URI set by clients that links to this
            profile's client-side copy.
            The maximum number of bytes allowed is 4000.
        group_id (str):
            The cluster id of the profile to associate with other
            profile(s) for the same candidate.

            This field should be generated by the customer. If a value
            is not provided, a random UUID is assigned to this field of
            the profile.

            This is used to link multiple profiles to the same
            candidate. For example, a client has a candidate with two
            profiles, where one was created recently and the other one
            was created 5 years ago. These two profiles may be very
            different. The clients can create the first profile and get
            a generated
            [group_id][google.cloud.talent.v4beta1.Profile.group_id],
            and assign it when the second profile is created, indicating
            these two profiles are referring to the same candidate.
        is_hirable (~.wrappers.BoolValue):
            Indicates the hirable status of the
            candidate.
        create_time (~.timestamp.Timestamp):
            The timestamp when the profile was first
            created at this source.
        update_time (~.timestamp.Timestamp):
            The timestamp when the profile was last
            updated at this source.
        candidate_update_time (~.timestamp.Timestamp):
            The timestamp when the profile was last updated as a result
            of a direct or indirect action by a candidate.

            These actions include:

            -  Direct actions such as the candidate submitting a new
               resume as part of a job application to the agency, using
               a self-service tool such as a website to update their
               profile, and so on.
            -  Indirect actions by the candidate such as uploading a
               resume to a job board that is collected by the agency
               through a feed, providing a resume to a recruiter who
               then uploads it into the ATS, and so on.
            -  Updates made to the candidate's profile by the recruiter
               as a result of interacting with the candidate (for
               example adding a skill or work preference, and so on).
               Changes to
               [recruiting_notes][google.cloud.talent.v4beta1.Profile.recruiting_notes]
               are specifically excluded from this action type.

            Note:
            [candidate_update_time][google.cloud.talent.v4beta1.Profile.candidate_update_time]
            must be greater than or equal to
            [resume_update_time][google.cloud.talent.v4beta1.Profile.resume_update_time]
            or an error is thrown.
        resume_update_time (~.timestamp.Timestamp):
            The timestamp when the candidate's resume was added or
            updated on the candidate's profile. Whether that resume was
            directly uploaded by a candidate, pulled from a 3rd party
            job board feed, added by a recruiter, and so on.

            If this field is updated, it's expected that
            [resume][google.cloud.talent.v4beta1.Profile.resume] is
            provided in the create or update calls.
        resume (~.profile.Resume):
            The resume representing this profile.
        person_names (Sequence[~.profile.PersonName]):
            The names of the candidate this profile
            references.
            Currently only one person name is supported.
        addresses (Sequence[~.profile.Address]):
            The candidate's postal addresses. It's highly recommended to
            input this information as accurately as possible to help
            improve search quality. Here are some recommendations:

            -  Provide
               [Address.usage][google.cloud.talent.v4beta1.Address.usage]
               if possible, especially if the address is PERSONAL.
               During a search only personal addresses are considered.
               If there is no such address, all addresses with
               unspecified usage are assumed to be personal.
            -  Provide
               [Address.current][google.cloud.talent.v4beta1.Address.current]
               for the current address if possible. During a search,
               only current addresses are considered. If there is no
               such address, all addresses are assumed to be current.

            When displaying a candidate's addresses, it is sometimes
            desirable to limit the number of addresses shown. In these
            cases we recommend that you display the addresses in the
            following order of priority:

            1. [Address.usage][google.cloud.talent.v4beta1.Address.usage]
               is PERSONAL and
               [Address.current][google.cloud.talent.v4beta1.Address.current]
               is true.
            2. [Address.usage][google.cloud.talent.v4beta1.Address.usage]
               is PERSONAL and
               [Address.current][google.cloud.talent.v4beta1.Address.current]
               is false or not set.
            3. [Address.usage][google.cloud.talent.v4beta1.Address.usage]
               is CONTACT_INFO_USAGE_UNSPECIFIED and
               [Address.current][google.cloud.talent.v4beta1.Address.current]
               is true.
            4. [Address.usage][google.cloud.talent.v4beta1.Address.usage]
               is CONTACT_INFO_USAGE_UNSPECIFIED and
               [Address.current][google.cloud.talent.v4beta1.Address.current]
               is false or not set.
        email_addresses (Sequence[~.profile.Email]):
            The candidate's email addresses.
        phone_numbers (Sequence[~.profile.Phone]):
            The candidate's phone number(s).
        personal_uris (Sequence[~.profile.PersonalUri]):
            The candidate's personal URIs.
        additional_contact_info (Sequence[~.profile.AdditionalContactInfo]):
            Available contact information besides
            [addresses][google.cloud.talent.v4beta1.Profile.addresses],
            [email_addresses][google.cloud.talent.v4beta1.Profile.email_addresses],
            [phone_numbers][google.cloud.talent.v4beta1.Profile.phone_numbers]
            and
            [personal_uris][google.cloud.talent.v4beta1.Profile.personal_uris].
            For example, Hang-out, Skype.
        employment_records (Sequence[~.profile.EmploymentRecord]):
            The employment history records of the candidate. It's highly
            recommended to input this information as accurately as
            possible to help improve search quality. Here are some
            recommendations:

            -  Specify the start and end dates of the employment
               records.
            -  List different employment types separately, no matter how
               minor the change is. For example, only job title is
               changed from "software engineer" to "senior software
               engineer".
            -  Provide
               [EmploymentRecord.is_current][google.cloud.talent.v4beta1.EmploymentRecord.is_current]
               for the current employment if possible. If not, it's
               inferred from user inputs.

            The limitation for max number of employment records is 100.
        education_records (Sequence[~.profile.EducationRecord]):
            The education history record of the candidate. It's highly
            recommended to input this information as accurately as
            possible to help improve search quality. Here are some
            recommendations:

            -  Specify the start and end dates of the education records.
            -  List each education type separately, no matter how minor
               the change is. For example, the profile contains the
               education experience from the same school but different
               degrees.
            -  Provide
               [EducationRecord.is_current][google.cloud.talent.v4beta1.EducationRecord.is_current]
               for the current education if possible. If not, it's
               inferred from user inputs.

            The limitation for max number of education records is 100.
        skills (Sequence[~.common.Skill]):
            The skill set of the candidate. It's highly
            recommended to provide as much information as
            possible to help improve the search quality.
            The limitation for max number of skills is 500.
        activities (Sequence[~.profile.Activity]):
            The individual or collaborative activities which the
            candidate has participated in, for example, open-source
            projects, class assignments that aren't listed in
            [employment_records][google.cloud.talent.v4beta1.Profile.employment_records].

            The limitation for max number of activities is 50.
        publications (Sequence[~.profile.Publication]):
            The publications published by the candidate.
            The limitation for max number of publications is
            50.
        patents (Sequence[~.profile.Patent]):
            The patents acquired by the candidate.
        certifications (Sequence[~.common.Certification]):
            The certifications acquired by the candidate.
        applications (Sequence[str]):
            Output only. The resource names of the
            candidate's applications.
        assignments (Sequence[str]):
            Output only. The resource names of the
            candidate's assignments.
        custom_attributes (Sequence[~.profile.Profile.CustomAttributesEntry]):
            A map of fields to hold both filterable and non-filterable
            custom profile attributes that aren't covered by the
            provided structured fields. See
            [CustomAttribute][google.cloud.talent.v4beta1.CustomAttribute]
            for more details.

            At most 100 filterable and at most 100 unfilterable keys are
            supported. If limit is exceeded, an error is thrown. Custom
            attributes are ``unfilterable`` by default. These are
            filterable when the ``filterable`` flag is set to ``true``.

            Numeric custom attributes: each key can only map to one
            numeric value, otherwise an error is thrown. Client can also
            filter on numeric custom attributes using '>', '<' or '='
            operators.

            String custom attributes: each key can map up to 50 string
            values. For filterable string value, each value has a byte
            size of no more than 256B. For unfilterable string values,
            the maximum byte size of a single key is 64B. An error is
            thrown for any request exceeding the limit. The maximum
            total byte size is 10KB.
        processed (bool):
            Output only. Indicates if a summarized
            profile was created as part of the profile
            creation API call. This flag does not indicate
            whether a profile is searchable or not.
        keyword_snippet (str):
            Output only. Keyword snippet shows how the search result is
            related to a search query. This is only returned in
            [SearchProfilesResponse][google.cloud.talent.v4beta1.SearchProfilesResponse].
        availability_signals (Sequence[~.profile.AvailabilitySignal]):
            Output only. Candidate's availability
            signals.
        derived_addresses (Sequence[~.common.Location]):
            Output only. Derived locations of the profile, resolved from
            [Profile.addresses][google.cloud.talent.v4beta1.Profile.addresses].

            [derived_addresses][google.cloud.talent.v4beta1.Profile.derived_addresses]
            are exactly matched to
            [Profile.addresses][google.cloud.talent.v4beta1.Profile.addresses]
            in the same order.
    """

    name = proto.Field(proto.STRING, number=1)

    external_id = proto.Field(proto.STRING, number=2)

    source = proto.Field(proto.STRING, number=3)

    uri = proto.Field(proto.STRING, number=4)

    group_id = proto.Field(proto.STRING, number=5)

    is_hirable = proto.Field(proto.MESSAGE, number=6, message=wrappers.BoolValue,)

    create_time = proto.Field(proto.MESSAGE, number=7, message=timestamp.Timestamp,)

    update_time = proto.Field(proto.MESSAGE, number=8, message=timestamp.Timestamp,)

    candidate_update_time = proto.Field(
        proto.MESSAGE, number=67, message=timestamp.Timestamp,
    )

    resume_update_time = proto.Field(
        proto.MESSAGE, number=68, message=timestamp.Timestamp,
    )

    resume = proto.Field(proto.MESSAGE, number=53, message="Resume",)

    person_names = proto.RepeatedField(proto.MESSAGE, number=11, message="PersonName",)

    addresses = proto.RepeatedField(proto.MESSAGE, number=12, message="Address",)

    email_addresses = proto.RepeatedField(proto.MESSAGE, number=13, message="Email",)

    phone_numbers = proto.RepeatedField(proto.MESSAGE, number=14, message="Phone",)

    personal_uris = proto.RepeatedField(
        proto.MESSAGE, number=15, message="PersonalUri",
    )

    additional_contact_info = proto.RepeatedField(
        proto.MESSAGE, number=16, message="AdditionalContactInfo",
    )

    employment_records = proto.RepeatedField(
        proto.MESSAGE, number=17, message="EmploymentRecord",
    )

    education_records = proto.RepeatedField(
        proto.MESSAGE, number=18, message="EducationRecord",
    )

    skills = proto.RepeatedField(proto.MESSAGE, number=19, message=common.Skill,)

    activities = proto.RepeatedField(proto.MESSAGE, number=20, message="Activity",)

    publications = proto.RepeatedField(proto.MESSAGE, number=21, message="Publication",)

    patents = proto.RepeatedField(proto.MESSAGE, number=22, message="Patent",)

    certifications = proto.RepeatedField(
        proto.MESSAGE, number=23, message=common.Certification,
    )

    applications = proto.RepeatedField(proto.STRING, number=47)

    assignments = proto.RepeatedField(proto.STRING, number=48)

    custom_attributes = proto.MapField(
        proto.STRING, proto.MESSAGE, number=26, message=common.CustomAttribute,
    )

    processed = proto.Field(proto.BOOL, number=27)

    keyword_snippet = proto.Field(proto.STRING, number=28)

    availability_signals = proto.RepeatedField(
        proto.MESSAGE, number=70, message="AvailabilitySignal",
    )

    derived_addresses = proto.RepeatedField(
        proto.MESSAGE, number=64, message=common.Location,
    )


class AvailabilitySignal(proto.Message):
    r"""Candidate availability signal.

    Attributes:
        type_ (~.common.AvailabilitySignalType):
            Type of signal.
        last_update_time (~.timestamp.Timestamp):
            Timestamp of when the given availability
            activity last happened.
        filter_satisfied (~.wrappers.BoolValue):
            Indicates if the
            [last_update_time][google.cloud.talent.v4beta1.AvailabilitySignal.last_update_time]
            is within
            [AvailabilityFilter.range][google.cloud.talent.v4beta1.AvailabilityFilter.range].

            Returned only in a search response when there is an
            [AvailabilityFilter][google.cloud.talent.v4beta1.AvailabilityFilter]
            in
            [ProfileQuery.availability_filters][google.cloud.talent.v4beta1.ProfileQuery.availability_filters]
            where
            [signal_type][google.cloud.talent.v4beta1.AvailabilityFilter.signal_type]
            matches
            [type][google.cloud.talent.v4beta1.AvailabilitySignal.type].
    """

    type_ = proto.Field(proto.ENUM, number=1, enum=common.AvailabilitySignalType,)

    last_update_time = proto.Field(
        proto.MESSAGE, number=2, message=timestamp.Timestamp,
    )

    filter_satisfied = proto.Field(proto.MESSAGE, number=3, message=wrappers.BoolValue,)


class Resume(proto.Message):
    r"""Resource that represents a resume.

    Attributes:
        structured_resume (str):
            Users can create a profile with only this field field, if
            [resume_type][google.cloud.talent.v4beta1.Resume.resume_type]
            is
            [HRXML][google.cloud.talent.v4beta1.Resume.ResumeType.HRXML].
            For example, the API parses this field and creates a profile
            with all structured fields populated.
            [EmploymentRecord][google.cloud.talent.v4beta1.EmploymentRecord],
            [EducationRecord][google.cloud.talent.v4beta1.EducationRecord],
            and so on. An error is thrown if this field cannot be
            parsed.

            Note that the use of the functionality offered by this field
            to extract data from resumes is an Alpha feature and as such
            is not covered by any SLA.
        resume_type (~.profile.Resume.ResumeType):
            The format of
            [structured_resume][google.cloud.talent.v4beta1.Resume.structured_resume].
    """

    class ResumeType(proto.Enum):
        r"""The format of a structured resume."""
        RESUME_TYPE_UNSPECIFIED = 0
        HRXML = 1
        OTHER_RESUME_TYPE = 2

    structured_resume = proto.Field(proto.STRING, number=1)

    resume_type = proto.Field(proto.ENUM, number=2, enum=ResumeType,)


class PersonName(proto.Message):
    r"""Resource that represents the name of a person.

    Attributes:
        formatted_name (str):
            A string represents a person's full name. For
            example, "Dr. John Smith".
            Number of characters allowed is 100.
        structured_name (~.profile.PersonName.PersonStructuredName):
            A person's name in a structured way (last
            name, first name, suffix, and so on.)
        preferred_name (str):
            Preferred name for the person. This field is ignored if
            [structured_name][google.cloud.talent.v4beta1.PersonName.structured_name]
            is provided.

            Number of characters allowed is 100.
    """

    class PersonStructuredName(proto.Message):
        r"""Resource that represents a person's structured name.

        Attributes:
            given_name (str):
                Given/first name.

                It's derived from
                [formatted_name][google.cloud.talent.v4beta1.PersonName.formatted_name]
                if not provided.

                Number of characters allowed is 100.
            preferred_name (str):
                Preferred given/first name or nickname.
                Number of characters allowed is 100.
            middle_initial (str):
                Middle initial.

                It's derived from
                [formatted_name][google.cloud.talent.v4beta1.PersonName.formatted_name]
                if not provided.

                Number of characters allowed is 20.
            family_name (str):
                Family/last name.

                It's derived from
                [formatted_name][google.cloud.talent.v4beta1.PersonName.formatted_name]
                if not provided.

                Number of characters allowed is 100.
            suffixes (Sequence[str]):
                Suffixes.
                Number of characters allowed is 20.
            prefixes (Sequence[str]):
                Prefixes.
                Number of characters allowed is 20.
        """

        given_name = proto.Field(proto.STRING, number=1)

        preferred_name = proto.Field(proto.STRING, number=6)

        middle_initial = proto.Field(proto.STRING, number=2)

        family_name = proto.Field(proto.STRING, number=3)

        suffixes = proto.RepeatedField(proto.STRING, number=4)

        prefixes = proto.RepeatedField(proto.STRING, number=5)

    formatted_name = proto.Field(proto.STRING, number=1, oneof="person_name")

    structured_name = proto.Field(
        proto.MESSAGE, number=2, oneof="person_name", message=PersonStructuredName,
    )

    preferred_name = proto.Field(proto.STRING, number=3)


class Address(proto.Message):
    r"""Resource that represents a address.

    Attributes:
        usage (~.common.ContactInfoUsage):
            The usage of the address. For example,
            SCHOOL, WORK, PERSONAL.
        unstructured_address (str):
            Unstructured address.
            For example, "1600 Amphitheatre Pkwy, Mountain
            View, CA 94043", "Sunnyvale, California".

            Number of characters allowed is 100.
        structured_address (~.postal_address.PostalAddress):
            Structured address that contains street
            address, city, state, country, and so on.
        current (~.wrappers.BoolValue):
            Indicates if it's the person's current
            address.
    """

    usage = proto.Field(proto.ENUM, number=1, enum=common.ContactInfoUsage,)

    unstructured_address = proto.Field(proto.STRING, number=2, oneof="address")

    structured_address = proto.Field(
        proto.MESSAGE, number=3, oneof="address", message=postal_address.PostalAddress,
    )

    current = proto.Field(proto.MESSAGE, number=4, message=wrappers.BoolValue,)


class Email(proto.Message):
    r"""Resource that represents a person's email address.

    Attributes:
        usage (~.common.ContactInfoUsage):
            The usage of the email address. For example,
            SCHOOL, WORK, PERSONAL.
        email_address (str):
            Email address.
            Number of characters allowed is 4,000.
    """

    usage = proto.Field(proto.ENUM, number=1, enum=common.ContactInfoUsage,)

    email_address = proto.Field(proto.STRING, number=2)


class Phone(proto.Message):
    r"""Resource that represents a person's telephone number.

    Attributes:
        usage (~.common.ContactInfoUsage):
            The usage of the phone. For example, SCHOOL,
            WORK, PERSONAL.
        type_ (~.profile.Phone.PhoneType):
            The phone type. For example, LANDLINE,
            MOBILE, FAX.
        number (str):
            Phone number.
            Any phone formats are supported and only exact
            matches are performed on searches. For example,
            if a phone number in profile is provided in the
            format of "(xxx)xxx-xxxx", in profile searches
            the same phone format has to be provided.

            Number of characters allowed is 20.
        when_available (str):
            When this number is available. Any
            descriptive string is expected.
            Number of characters allowed is 100.
    """

    class PhoneType(proto.Enum):
        r"""Enum that represents the type of the telephone."""
        PHONE_TYPE_UNSPECIFIED = 0
        LANDLINE = 1
        MOBILE = 2
        FAX = 3
        PAGER = 4
        TTY_OR_TDD = 5
        VOICEMAIL = 6
        VIRTUAL = 7
        VOIP = 8
        MOBILE_OR_LANDLINE = 9

    usage = proto.Field(proto.ENUM, number=1, enum=common.ContactInfoUsage,)

    type_ = proto.Field(proto.ENUM, number=2, enum=PhoneType,)

    number = proto.Field(proto.STRING, number=3)

    when_available = proto.Field(proto.STRING, number=4)


class PersonalUri(proto.Message):
    r"""Resource that represents a valid URI for a personal use.

    Attributes:
        uri (str):
            The personal URI.
            Number of characters allowed is 4,000.
    """

    uri = proto.Field(proto.STRING, number=1)


class AdditionalContactInfo(proto.Message):
    r"""Resource that represents contact information other than
    phone, email, URI and addresses.

    Attributes:
        usage (~.common.ContactInfoUsage):
            The usage of this contact method. For
            example, SCHOOL, WORK, PERSONAL.
        name (str):
            The name of the contact method.
            For example, "hangout", "skype".

            Number of characters allowed is 100.
        contact_id (str):
            The contact id.
            Number of characters allowed is 100.
    """

    usage = proto.Field(proto.ENUM, number=1, enum=common.ContactInfoUsage,)

    name = proto.Field(proto.STRING, number=2)

    contact_id = proto.Field(proto.STRING, number=3)


class EmploymentRecord(proto.Message):
    r"""Resource that represents an employment record of a candidate.

    Attributes:
        start_date (~.date.Date):
            Start date of the employment.
        end_date (~.date.Date):
            End date of the employment.
        employer_name (str):
            The name of the employer
            company/organization.
            For example, "Google", "Alphabet", and so on.
            Number of characters allowed is 250.
        division_name (str):
            The division name of the employment.
            For example, division, department, client, and
            so on.
            Number of characters allowed is 100.
        address (~.profile.Address):
            The physical address of the employer.
        job_title (str):
            The job title of the employment.
            For example, "Software Engineer", "Data
            Scientist", and so on.
            Number of characters allowed is 250.
        job_description (str):
            The description of job content.
            Number of characters allowed is 100,000.
        is_supervisor (~.wrappers.BoolValue):
            If the jobs is a supervisor position.
        is_self_employed (~.wrappers.BoolValue):
            If this employment is self-employed.
        is_current (~.wrappers.BoolValue):
            If this employment is current.
        job_title_snippet (str):
            Output only. The job title snippet shows how the
            [job_title][google.cloud.talent.v4beta1.EmploymentRecord.job_title]
            is related to a search query. It's empty if the
            [job_title][google.cloud.talent.v4beta1.EmploymentRecord.job_title]
            isn't related to the search query.
        job_description_snippet (str):
            Output only. The job description snippet shows how the
            [job_description][google.cloud.talent.v4beta1.EmploymentRecord.job_description]
            is related to a search query. It's empty if the
            [job_description][google.cloud.talent.v4beta1.EmploymentRecord.job_description]
            isn't related to the search query.
        employer_name_snippet (str):
            Output only. The employer name snippet shows how the
            [employer_name][google.cloud.talent.v4beta1.EmploymentRecord.employer_name]
            is related to a search query. It's empty if the
            [employer_name][google.cloud.talent.v4beta1.EmploymentRecord.employer_name]
            isn't related to the search query.
    """

    start_date = proto.Field(proto.MESSAGE, number=1, message=date.Date,)

    end_date = proto.Field(proto.MESSAGE, number=2, message=date.Date,)

    employer_name = proto.Field(proto.STRING, number=3)

    division_name = proto.Field(proto.STRING, number=4)

    address = proto.Field(proto.MESSAGE, number=5, message=Address,)

    job_title = proto.Field(proto.STRING, number=6)

    job_description = proto.Field(proto.STRING, number=7)

    is_supervisor = proto.Field(proto.MESSAGE, number=8, message=wrappers.BoolValue,)

    is_self_employed = proto.Field(proto.MESSAGE, number=9, message=wrappers.BoolValue,)

    is_current = proto.Field(proto.MESSAGE, number=10, message=wrappers.BoolValue,)

    job_title_snippet = proto.Field(proto.STRING, number=11)

    job_description_snippet = proto.Field(proto.STRING, number=12)

    employer_name_snippet = proto.Field(proto.STRING, number=13)


class EducationRecord(proto.Message):
    r"""Resource that represents an education record of a candidate.

    Attributes:
        start_date (~.date.Date):
            The start date of the education.
        end_date (~.date.Date):
            The end date of the education.
        expected_graduation_date (~.date.Date):
            The expected graduation date if currently
            pursuing a degree.
        school_name (str):
            The name of the school or institution.
            For example, "Stanford University", "UC
            Berkeley", and so on.
            Number of characters allowed is 250.
        address (~.profile.Address):
            The physical address of the education
            institution.
        degree_description (str):
            The full description of the degree.
            For example, "Master of Science in Computer
            Science", "B.S in Math".
            Number of characters allowed is 100.
        structured_degree (~.profile.Degree):
            The structured notation of the degree.
        description (str):
            The description of the education.
            Number of characters allowed is 100,000.
        is_current (~.wrappers.BoolValue):
            If this education is current.
        school_name_snippet (str):
            Output only. The school name snippet shows how the
            [school_name][google.cloud.talent.v4beta1.EducationRecord.school_name]
            is related to a search query in search result. It's empty if
            the
            [school_name][google.cloud.talent.v4beta1.EducationRecord.school_name]
            isn't related to the search query.
        degree_snippet (str):
            Output only. The job description snippet shows how the
            [Degree][google.cloud.talent.v4beta1.Degree] is related to a
            search query in search result. It's empty if the
            [Degree][google.cloud.talent.v4beta1.Degree] isn't related
            to the search query.
    """

    start_date = proto.Field(proto.MESSAGE, number=1, message=date.Date,)

    end_date = proto.Field(proto.MESSAGE, number=2, message=date.Date,)

    expected_graduation_date = proto.Field(proto.MESSAGE, number=3, message=date.Date,)

    school_name = proto.Field(proto.STRING, number=4)

    address = proto.Field(proto.MESSAGE, number=5, message=Address,)

    degree_description = proto.Field(proto.STRING, number=6, oneof="degree")

    structured_degree = proto.Field(
        proto.MESSAGE, number=7, oneof="degree", message="Degree",
    )

    description = proto.Field(proto.STRING, number=8)

    is_current = proto.Field(proto.MESSAGE, number=9, message=wrappers.BoolValue,)

    school_name_snippet = proto.Field(proto.STRING, number=10)

    degree_snippet = proto.Field(proto.STRING, number=11)


class Degree(proto.Message):
    r"""Resource that represents a degree pursuing or acquired by a
    candidate.

    Attributes:
        degree_type (~.common.DegreeType):
            ISCED degree type.
        degree_name (str):
            Full Degree name.
            For example, "B.S.", "Master of Arts", and so
            on.
            Number of characters allowed is 100.
        fields_of_study (Sequence[str]):
            Fields of study for the degree.
            For example, "Computer science", "engineering".
            Number of characters allowed is 100.
    """

    degree_type = proto.Field(proto.ENUM, number=1, enum=common.DegreeType,)

    degree_name = proto.Field(proto.STRING, number=2)

    fields_of_study = proto.RepeatedField(proto.STRING, number=3)


class Activity(proto.Message):
    r"""Resource that represents an individual or collaborative
    activity participated in by a candidate, for example, an open-
    source project, a class assignment, and so on.

    Attributes:
        display_name (str):
            Activity display name.
            Number of characters allowed is 100.
        description (str):
            Activity description.
            Number of characters allowed is 100,000.
        uri (str):
            Activity URI.
            Number of characters allowed is 4,000.
        create_date (~.date.Date):
            The first creation date of the activity.
        update_date (~.date.Date):
            The last update date of the activity.
        team_members (Sequence[str]):
            A list of team members involved in this
            activity.
            Number of characters allowed is 100.

            The limitation for max number of team members is
            50.
        skills_used (Sequence[~.common.Skill]):
            A list of skills used in this activity.
            The limitation for max number of skills used is
            50.
        activity_name_snippet (str):
            Output only. Activity name snippet shows how the
            [display_name][google.cloud.talent.v4beta1.Activity.display_name]
            is related to a search query. It's empty if the
            [display_name][google.cloud.talent.v4beta1.Activity.display_name]
            isn't related to the search query.
        activity_description_snippet (str):
            Output only. Activity description snippet shows how the
            [description][google.cloud.talent.v4beta1.Activity.description]
            is related to a search query. It's empty if the
            [description][google.cloud.talent.v4beta1.Activity.description]
            isn't related to the search query.
        skills_used_snippet (Sequence[str]):
            Output only. Skill used snippet shows how the corresponding
            [skills_used][google.cloud.talent.v4beta1.Activity.skills_used]
            are related to a search query. It's empty if the
            corresponding
            [skills_used][google.cloud.talent.v4beta1.Activity.skills_used]
            are not related to the search query.
    """

    display_name = proto.Field(proto.STRING, number=1)

    description = proto.Field(proto.STRING, number=2)

    uri = proto.Field(proto.STRING, number=3)

    create_date = proto.Field(proto.MESSAGE, number=4, message=date.Date,)

    update_date = proto.Field(proto.MESSAGE, number=5, message=date.Date,)

    team_members = proto.RepeatedField(proto.STRING, number=6)

    skills_used = proto.RepeatedField(proto.MESSAGE, number=7, message=common.Skill,)

    activity_name_snippet = proto.Field(proto.STRING, number=8)

    activity_description_snippet = proto.Field(proto.STRING, number=9)

    skills_used_snippet = proto.RepeatedField(proto.STRING, number=10)


class Publication(proto.Message):
    r"""Resource that represents a publication resource of a
    candidate.

    Attributes:
        authors (Sequence[str]):
            A list of author names.
            Number of characters allowed is 100.
        title (str):
            The title of the publication.
            Number of characters allowed is 100.
        description (str):
            The description of the publication.
            Number of characters allowed is 100,000.
        journal (str):
            The journal name of the publication.
            Number of characters allowed is 100.
        volume (str):
            Volume number.
            Number of characters allowed is 100.
        publisher (str):
            The publisher of the journal.
            Number of characters allowed is 100.
        publication_date (~.date.Date):
            The publication date.
        publication_type (str):
            The publication type.
            Number of characters allowed is 100.
        isbn (str):
            ISBN number.
            Number of characters allowed is 100.
    """

    authors = proto.RepeatedField(proto.STRING, number=1)

    title = proto.Field(proto.STRING, number=2)

    description = proto.Field(proto.STRING, number=3)

    journal = proto.Field(proto.STRING, number=4)

    volume = proto.Field(proto.STRING, number=5)

    publisher = proto.Field(proto.STRING, number=6)

    publication_date = proto.Field(proto.MESSAGE, number=7, message=date.Date,)

    publication_type = proto.Field(proto.STRING, number=8)

    isbn = proto.Field(proto.STRING, number=9)


class Patent(proto.Message):
    r"""Resource that represents the patent acquired by a candidate.

    Attributes:
        display_name (str):
            Name of the patent.
            Number of characters allowed is 100.
        inventors (Sequence[str]):
            A list of inventors' names.
            Number of characters allowed for each is 100.
        patent_status (str):
            The status of the patent.
            Number of characters allowed is 100.
        patent_status_date (~.date.Date):
            The date the last time the status of the
            patent was checked.
        patent_filing_date (~.date.Date):
            The date that the patent was filed.
        patent_office (str):
            The name of the patent office.
            Number of characters allowed is 100.
        patent_number (str):
            The number of the patent.
            Number of characters allowed is 100.
        patent_description (str):
            The description of the patent.
            Number of characters allowed is 100,000.
        skills_used (Sequence[~.common.Skill]):
            The skills used in this patent.
    """

    display_name = proto.Field(proto.STRING, number=1)

    inventors = proto.RepeatedField(proto.STRING, number=2)

    patent_status = proto.Field(proto.STRING, number=3)

    patent_status_date = proto.Field(proto.MESSAGE, number=4, message=date.Date,)

    patent_filing_date = proto.Field(proto.MESSAGE, number=5, message=date.Date,)

    patent_office = proto.Field(proto.STRING, number=6)

    patent_number = proto.Field(proto.STRING, number=7)

    patent_description = proto.Field(proto.STRING, number=8)

    skills_used = proto.RepeatedField(proto.MESSAGE, number=9, message=common.Skill,)


__all__ = tuple(sorted(__protobuf__.manifest))
