package entity

import (
	"time"
)

type Provider struct {
	ProviderID        int64           `json:"-"`
	ProviderUUID      string          `json:"provider_uuid"`
	InternalID        string          `json:"internal_id"`
	InternalSuffixID  string          `json:"internal_suffix_id"`
	MukID             string          `json:"muk_id"`
	OrganizatioName   string          `json:"org_name"`
	Gender            string          `json:"gender"`
	AcceptNewPatients string          `json:"accept_new_patients"`
	Name              string          `json:"name"`
	FirstName         string          `json:"first"`
	MiddleName        string          `json:"middle"`
	LastName          string          `json:"last"`
	Title             string          `json:"title"`
	Active            bool            `json:"active"`
	Enabled           bool            `json:"enabled"`
	CreateDate        time.Time       `json:"create_at"`
	UpdateDate        time.Time       `json:"update_at"`
	CreatedUser       User            `json:"created_user"`
	Keys              []ProviderKey   `json:"keys"`
	Address           ProviderAddress `json:"address"`
	Distance          float64         `json:"distance"`
	Organization      Organization    `json:"organization"`
}

type ProviderKey struct {
	ProviderKeyID         int64     `json:"-"`
	Provider              Provider  `json:"provider"`
	InternalID            string    `json:"internal_id"`
	InternalSuffixID      string    `json:"internal_suffix_id"`
	LocationSeqNumber     string    `json:"location_seq_number"`
	PlanCode              string    `json:"plan_code"`
	ProductID             string    `json:"product_id"`
	TreatmentCategoryCode string    `json:"treatment_category_code"`
	Active                bool      `json:"active"`
	Enabled               bool      `json:"enabled"`
	CreateDate            time.Time `json:"create_at"`
	UpdateDate            time.Time `json:"update_at"`
	CreatedUser           User      `json:"created_user"`
}

type ProviderAddress struct {
	StreetAddress1 string  `json:"street_address_1"`
	StreetAddress2 string  `json:"street_address_2"`
	CityName       string  `json:"city"`
	State          string  `json:"state"`
	ZipCode        string  `json:"zipcode"`
	Country        string  `json:"country"`
	Latitude       float64 `json:"lat"`
	Longitude      float64 `json:"long"`
	PhoneNumber    string  `json:"phone_number"`
}

type ProviderResponse struct {
	MukID                     string                     `json:"mukId"`
	FivePartKeyGroups         []PartKeyGroup             `json:"fivePartKeyGroups"`
	OrgName                   string                     `json:"orgName"`
	Gender                    string                     `json:"gender"`
	AcceptNewPatients         string                     `json:"acceptNewPatients"`
	ProviderName              string                     `json:"providerName"`
	FirstName                 string                     `json:"firstName"`
	LastName                  string                     `json:"lastName"`
	MiddleName                string                     `json:"middleName"`
	ProviderTitle             string                     `json:"providerTitle"`
	StreetName1               string                     `json:"streetName_1"`
	StreetName2               string                     `json:"streetName_2"`
	CityName                  string                     `json:"cityName"`
	State                     string                     `json:"state"`
	ZipCode                   string                     `json:"zipCode"`
	Country                   string                     `json:"country"`
	Latitude                  string                     `json:"latitude"`
	Longitude                 string                     `json:"longitude"`
	PhoneNumber               string                     `json:"phoneNumber"`
	ProviderEntityName        string                     `json:"providerEntityName"`
	ProviderEntityCode        string                     `json:"providerEntityCode"`
	ProviderTypeCode          []ProviderTypeCode         `json:"providerTypeCode"`
	Distance                  string                     `json:"distance"`
	AvailabilityOfCost        string                     `json:"availabilityOfCost"`
	TDDPhoneNumber            string                     `json:"tddPhoneNumber"`
	ExtendedOfficeHours       string                     `json:"extendedOfficeHours"`
	ProviderCountyCode        string                     `json:"providerCountyCode"`
	ProviderCountyName        string                     `json:"providerCountyName"`
	HospitalAffiliationNames  []HospitalAffiliationNames `json:"hospitalAffiliationNames"`
	ProviderAffiliationNumber string                     `json:"providerAffiliationNumber"`
	ProviderAffiliationName   string                     `json:"providerAffiliationName"`
	LanguagesSpoken           []Languages                `json:"languagesSpoken"`
	OfficeLanguagesSpoken     []Languages                `json:"officeLanguagesSpoken"`
	MedSchool                 string                     `json:"medSchool"`
	MedSchoolYear             string                     `json:"medSchoolYear"`
	Internship                string                     `json:"internship"`
	Residence                 string                     `json:"residency"`
	Specialty1                string                     `json:"specialty1"`
	Specialty2                string                     `json:"specialty2"`
	Specialty3                string                     `json:"specialty3"`
	Specialty4                string                     `json:"specialty4"`
	Certification1            string                     `json:"certification1"`
	Certification2            string                     `json:"certification2"`
	Certification3            string                     `json:"certification3"`
	Certification4            string                     `json:"certification4"`
}

type HospitalAffiliationNames struct {
	HospAffProvOrgName string `json:"hospAffProvOrgName"`
}

type Languages struct {
	Code string `json:"code"`
}

type ProviderTypeCode struct {
	Code string `json:"code"`
}

type PartKeyGroup struct {
	ProviderNum           string `json:"providerNum"`
	ProviderNumSuffix     string `json:"providerNumSuffix"`
	LocationSeqNum        string `json:"locationSeqNum"`
	PlanCode              string `json:"planCode"`
	ProductID             string `json:"productId"`
	TreatmentCategoryCode string `json:"treatmentCategoryCode"`
}
