from typing import Any, List, Optional

from bullhorn.types.person import Person


class ClientContact(Person):
    id: int
    address: Optional[str]
    businessSectors: List[int]
    category: int
    categories: List[int]
    certifications: str
    clientCorporation: int
    comments: str
    customDate1: Optional[int]
    customDate2: Optional[int]
    customDate3: Optional[int]
    customFloat1: Optional[float]
    customFloat2: Optional[float]
    customFloat3: Optional[float]
    customInt1: Optional[int]
    customInt2: Optional[int]
    customInt3: Optional[int]
    customObject1s: List[Any]
    customObject2s: List[Any]
    customObject3s: List[Any]
    customObject4s: List[Any]
    customObject5s: List[Any]
    customObject6s: List[Any]
    customObject7s: List[Any]
    customObject8s: List[Any]
    customObject9s: List[Any]
    customObject10s: List[Any]
    customText1: Optional[str]
    customText2: Optional[str]
    customText3: Optional[str]
    customText4: Optional[str]
    customText5: Optional[str]
    customText6: Optional[str]
    customText7: Optional[str]
    customText8: Optional[str]
    customText9: Optional[str]
    customText10: Optional[str]
    customText11: Optional[str]
    customText12: Optional[str]
    customText13: Optional[str]
    customText14: Optional[str]
    customText15: Optional[str]
    customText16: Optional[str]
    customText17: Optional[str]
    customText18: Optional[str]
    customText19: Optional[str]
    customText20: Optional[str]
    customTextBlock1: Optional[str]
    customTextBlock2: Optional[str]
    customTextBlock3: Optional[str]
    customTextBlock4: Optional[str]
    customTextBlock5: Optional[str]
    dateAdded: int
    dateLastModified: int
    dateLastVisit: Optional[int]
    description: str
    desiredCategories: str
    desiredSkills: str
    desiredSpecialties: str
    division: str
    email: str
    email2: Optional[str]
    email3: Optional[str]
    externalID: str
    fax: Optional[str]
    fax2: Optional[str]
    fax3: Optional[str]
    firstName: str
    isAnonymized: Optional[bool]
    isDayLightSavings: Optional[bool]
    isDeleted: bool
    lastName: str
    leads: List[int]
    linkedPerson: Person  # Person is a superclass of Candidate and ClientContact
    massMailOptOut: bool
    middleName: str
    mobile: Optional[str]
    name: str
    namePrefix: Optional[str]
    nameSuffix: Optional[str]
    nickName: Optional[str]
    numEmployees: int
    occupation: str
    office: str
    owner: int
    pager: Optional[str]
    password: str
    phone: str
    phone2: Optional[str]
    phone3: Optional[str]
    preferredContact: str
    referredByPerson: int
    reportToPerson: int
    secondaryAddress: Optional[str]
    secondaryOwners: List[int]
    skills: List[int]
    smsOptIn: bool
    source: str
    status: str
    timeZoneOffsetEST: int
    type: Optional[str]
    username: str
    salary: Optional[float]
    salaryUnit: str
    placements: List[int]
    publicDescription: str
    publishedCategory: int
    publishedZip: str
    reasonClosed: str
    reportTo: str
    reportToClientContact: int
    responseUser: int
    shifts: List[int]
    skillList: str
    skills: List[int]
    source: str
    specialties: List[int]
    startDate: int
    status: str
    submissions: List[int]
    tasks: List[int]
    taxRate: float
    taxStatus: str
    tearsheets: List[int]
    timeUnits: List[int]
    title: str
    travelRequirements: str
    type: int
    usersAssigned: str
    webResponses: List[int]
    willRelocate: bool
    willRelocateInt: int
    willSponsor: bool
    workersCompRate: int
    yearsRequired: int
