from typing import List, Optional

from bullhorn.types import client_contact, client_corporation, corporate_user, lead


class Opportunity:
    id: int
    actualCloseDate: Optional[int]
    address: str
    appointments: List[int]
    assignedDate: Optional[int]
    assignedUsers: List[int]
    benefits: str
    billRateCategoryID: int
    bonusPackage: str
    branchCode: str
    businessSector: int
    businessSectors: List[int]
    campaignSource: str
    category: int
    categories: List[int]
    certifications: List[int]
    clientContact: client_contact.ClientContact
    clientCorporation: client_corporation.ClientCorporation
    committed: bool
    customDate1: Optional[float]
    customDate2: Optional[float]
    customDate3: Optional[float]
    customFloat1: Optional[float]
    customFloat2: Optional[float]
    customFloat3: Optional[float]
    customInt1: Optional[int]
    customInt2: Optional[int]
    customInt3: Optional[int]
    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]
    customTextBlock1: Optional[str]
    customTextBlock2: Optional[str]
    customTextBlock3: Optional[str]
    customTextBlock4: Optional[str]
    customTextBlock5: Optional[str]
    customObject1s: List[int]
    customObject2s: List[int]
    customObject3s: List[int]
    customObject4s: List[int]
    customObject5s: List[int]
    customObject6s: List[int]
    customObject7s: List[int]
    customObject8s: List[int]
    customObject9s: List[int]
    customObject10s: List[int]
    dateAdded: int
    dateLastModified: int
    dealValue: float
    degreeList: str
    description: str
    educationDegree: str
    effectiveDate: Optional[int]
    estimatedDuration: Optional[float]
    estimatedEndDate: Optional[int]
    estimatedHoursPerWeek: Optional[float]
    estimatedStartDate: int
    estimatedBillRate: float
    expectedCloseDate: Optional[int]
    expectedFee: float
    expectedPayRate: float
    externalCategoryID: int
    externalID: str
    history: List[int]
    ignoreUntilDate: Optional[int]
    isDeleted: bool
    isOpen: bool
    jobOrders: List[int]
    lead: Optional[lead.Lead]
    markUpPercentage: Optional[float]
    notes: List[int]
    numOpenings: int
    onSite: str
    optionsPackage: str
    owner: corporate_user.CorporateUser
    priority: int
    publicDescription: str
    publishedZip: str
    reasonClosed: str
    salary: float
    salaryUnit: str
    skillList: str
    skills: List[int]
    source: str
    specialties: List[int]
    status: str
    tasks: List[int]
    taxRate: float
    taxStatus: str
    tearsheets: List[int]
    title: str
    type: str
    weightedDealValue: float
    willRelocate: bool
    winProbabilityPercent: Optional[float]
    yearsRequired: int
