package dto

// JSON:API Health Insurance Companies DTOs

type HealthInsuranceCompanyAttributes struct {
	LandID         string `json:"land_id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
	FederalStateID string `json:"federal_state_id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
	FederalState   string `json:"federal_state,omitempty" example:"Bayern"`
	LandName       string `json:"land_name" example:"Germany"`
	LandISOCode    string `json:"land_iso_code,omitempty" example:"DE"`
	Name           string `json:"name" example:"ABC Insurance"`
	SortKey        *int   `json:"sortkey" example:"1"`
	State          string `json:"state,omitempty" example:"Berlin"`
	Address        string `json:"address,omitempty" example:"Main Street 10"`
	MobileNumber   string `json:"mobile_number,omitempty" example:"+4912345678"`
	Email          string `json:"email,omitempty" example:"info@abc-insurance.local"`
	Note           string `json:"note,omitempty" example:"Preferred insurance provider"`
	IsActive       bool   `json:"is_active" example:"true"`
	CreatedAt      string `json:"created_at,omitempty" example:"2026-03-12T03:04:05Z"`
	CreatedBy      string `json:"created_by,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
	UpdatedAt      string `json:"updated_at,omitempty" example:"2026-03-12T03:04:05Z"`
	UpdatedBy      string `json:"updated_by,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
	DeletedAt      string `json:"deleted_at,omitempty" example:"2026-03-12T03:04:05Z"`
	DeletedBy      string `json:"deleted_by,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
}

type HealthInsuranceCompanyResource struct {
	Type       string                           `json:"type" example:"health_insurance_company"`
	ID         string                           `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
	Attributes HealthInsuranceCompanyAttributes `json:"attributes"`
}

type HealthInsuranceCompanyResponse struct {
	Data HealthInsuranceCompanyResource `json:"data"`
}

type HealthInsuranceCompanyListResponse struct {
	Data []HealthInsuranceCompanyResource `json:"data"`
	Meta struct {
		PageNumber int   `json:"page_number" example:"1"`
		PageSize   int   `json:"page_size" example:"20"`
		Total      int64 `json:"total" example:"120"`
	} `json:"meta"`
}

type HealthInsuranceCompanyDataTableResponse struct {
	Data []HealthInsuranceCompanyResource `json:"data"`
	Meta struct {
		Draw            int   `json:"draw" example:"1"`
		RecordsTotal    int64 `json:"records_total" example:"120"`
		RecordsFiltered int64 `json:"records_filtered" example:"12"`
	} `json:"meta"`
}

type HealthInsuranceCompanyCreateAttributes struct {
	Name         string  `json:"name" validate:"required" example:"ABC Insurance"`
	SortKey      *int    `json:"sortkey" example:"1"`
	LandID       *string `json:"land_id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
	State        *string `json:"state,omitempty" example:"Berlin"`
	Address      *string `json:"address,omitempty" example:"Main Street 10"`
	MobileNumber *string `json:"mobile_number,omitempty" example:"+4912345678"`
	Email        *string `json:"email,omitempty" example:"info@abc-insurance.local"`
	Note         *string `json:"note,omitempty" example:"Preferred insurance provider"`
	IsActive     *bool   `json:"is_active,omitempty" example:"true"`
}

type HealthInsuranceCompanyCreateData struct {
	Type       string                                 `json:"type" validate:"required,oneof=health_insurance_company_create health_insurance_company" example:"health_insurance_company_create"`
	Attributes HealthInsuranceCompanyCreateAttributes `json:"attributes" validate:"required"`
}

type HealthInsuranceCompanyCreateRequest struct {
	Data HealthInsuranceCompanyCreateData `json:"data" validate:"required"`
}

type HealthInsuranceCompanyUpdateAttributes struct {
	Name         *string `json:"name,omitempty" example:"ABC Insurance"`
	SortKey      NullInt `json:"sortkey,omitempty" swaggertype:"integer" example:"1"`
	LandID       *string `json:"land_id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
	State        *string `json:"state,omitempty" example:"Berlin"`
	Address      *string `json:"address,omitempty" example:"Main Street 10"`
	MobileNumber *string `json:"mobile_number,omitempty" example:"+4912345678"`
	Email        *string `json:"email,omitempty" example:"info@abc-insurance.local"`
	Note         *string `json:"note,omitempty" example:"Preferred insurance provider"`
	IsActive     *bool   `json:"is_active,omitempty" example:"true"`
}

type HealthInsuranceCompanyUpdateData struct {
	Type       string                                 `json:"type" validate:"required,oneof=health_insurance_company_update health_insurance_company" example:"health_insurance_company_update"`
	ID         string                                 `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
	Attributes HealthInsuranceCompanyUpdateAttributes `json:"attributes" validate:"required"`
}

type HealthInsuranceCompanyUpdateRequest struct {
	Data HealthInsuranceCompanyUpdateData `json:"data" validate:"required"`
}
