package dto

// JSON:API Facility DTOs

type FacilityAttributes struct {
	Category  string `json:"category" example:"heslo-rope-label"`
	Name      string `json:"name" example:"Fuel Truck Rope Label"`
	Type      string `json:"type" example:"Sling"`
	SortKey   *int   `json:"sortkey" example:"1"`
	Length    string `json:"length,omitempty" example:"10m"`
	Weight    string `json:"weight,omitempty" example:"10kg"`
	Electric  string `json:"electric" example:"available"`
	Note      string `json:"note,omitempty" example:"Dry lease fuel truck"`
	IsActive  bool   `json:"is_active" example:"true"`
	CreatedBy string `json:"created_by,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
	UpdatedBy string `json:"updated_by,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
	CreatedAt string `json:"created_at,omitempty" example:"2026-03-12T03:04:05Z"`
	UpdatedAt string `json:"updated_at,omitempty" example:"2026-03-12T03:04:05Z"`
}

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

type FacilityResponse struct {
	Data FacilityResource `json:"data"`
}

type FacilityDeleteResponse struct {
	Data struct {
		Type       string `json:"type" example:"facility_delete"`
		Attributes struct {
			Deleted bool `json:"deleted" example:"true"`
		} `json:"attributes"`
	} `json:"data"`
}

type FacilityListResponse struct {
	Data []FacilityResource `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 FacilityDataTableResponse struct {
	Data []FacilityResource `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 FacilityCreateAttributes struct {
	Category string  `json:"category" validate:"required" example:"heslo-rope-label"`
	Name     string  `json:"name" validate:"required" example:"Fuel Truck Rope Label"`
	Type     string  `json:"type" example:"Sling"`
	SortKey  *int    `json:"sortkey" example:"1"`
	Length   *string `json:"length,omitempty" example:"10m"`
	Weight   *string `json:"weight,omitempty" example:"10kg"`
	Electric *string `json:"electric,omitempty" example:"available"`
	Note     *string `json:"note,omitempty" example:"Dry lease fuel truck"`
	IsActive *bool   `json:"is_active,omitempty" example:"true"`
}

type FacilityCreateData struct {
	Type       string                   `json:"type" validate:"required,oneof=facility_create facility" example:"facility_create"`
	Attributes FacilityCreateAttributes `json:"attributes" validate:"required"`
}

type FacilityCreateRequest struct {
	Data FacilityCreateData `json:"data" validate:"required"`
}

type FacilityUpdateAttributes struct {
	Category *string `json:"category,omitempty" example:"heslo-rope-label"`
	Name     *string `json:"name,omitempty" example:"Fuel Truck Rope Label"`
	Type     *string `json:"type,omitempty" example:"Sling"`
	SortKey  NullInt `json:"sortkey,omitempty" swaggertype:"integer" example:"1"`
	Length   *string `json:"length,omitempty" example:"10m"`
	Weight   *string `json:"weight,omitempty" example:"10kg"`
	Electric *string `json:"electric,omitempty" example:"available"`
	Note     *string `json:"note,omitempty" example:"Dry lease fuel truck"`
	IsActive *bool   `json:"is_active,omitempty" example:"true"`
}

type FacilityUpdateData struct {
	Type       string                   `json:"type" validate:"required,oneof=facility_update facility" example:"facility_update"`
	ID         string                   `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
	Attributes FacilityUpdateAttributes `json:"attributes" validate:"required"`
}

type FacilityUpdateRequest struct {
	Data FacilityUpdateData `json:"data" validate:"required"`
}
