package dto

// JSON:API ICAO DTOs

type ICAOAttributes 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,omitempty" example:"Germany"`
	LandISOCode    string `json:"land_iso_code,omitempty" example:"DE"`
	ICAOCode       string `json:"icao_code" example:"EDDB"`
	Name           string `json:"name,omitempty" example:"Berlin Base"`
	SortKey        *int   `json:"sortkey" example:"1"`
	Address        string `json:"address,omitempty" example:"Muehlenstrasse 1"`
	LandlineNumber string `json:"landline_number,omitempty" example:"030123456"`
	MobileNumber   string `json:"mobile_number,omitempty" example:"0170123456"`
	Email          string `json:"email,omitempty" example:"ops@example.local"`
	Note           string `json:"note,omitempty" example:"Night operations supported"`
	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 ICAOResource struct {
	Type       string         `json:"type" example:"icao"`
	ID         string         `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
	Attributes ICAOAttributes `json:"attributes"`
}

type ICAOResponse struct {
	Data ICAOResource `json:"data"`
}

type ICAOListResponse struct {
	Data []ICAOResource `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 ICAODataTableResponse struct {
	Data []ICAOResource `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 ICAOCreateAttributes 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"`
	ICAOCode       string  `json:"icao_code" validate:"required" example:"EDDB"`
	Name           *string `json:"name,omitempty" example:"Berlin Base"`
	SortKey        *int    `json:"sortkey" example:"1"`
	Address        *string `json:"address,omitempty" example:"Muehlenstrasse 1"`
	LandlineNumber *string `json:"landline_number,omitempty" example:"030123456"`
	MobileNumber   *string `json:"mobile_number,omitempty" example:"0170123456"`
	Email          *string `json:"email,omitempty" example:"ops@example.local"`
	Note           *string `json:"note,omitempty" example:"Night operations supported"`
	IsActive       *bool   `json:"is_active,omitempty" example:"true"`
}

type ICAOCreateData struct {
	Type       string               `json:"type" validate:"required,oneof=icao_create icao" example:"icao_create"`
	Attributes ICAOCreateAttributes `json:"attributes" validate:"required"`
}

type ICAOCreateRequest struct {
	Data ICAOCreateData `json:"data" validate:"required"`
}

type ICAOUpdateAttributes 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"`
	ICAOCode       *string `json:"icao_code,omitempty" example:"EDDB"`
	Name           *string `json:"name,omitempty" example:"Berlin Base"`
	SortKey        NullInt `json:"sortkey,omitempty" swaggertype:"integer" example:"1"`
	Address        *string `json:"address,omitempty" example:"Muehlenstrasse 1"`
	LandlineNumber *string `json:"landline_number,omitempty" example:"030123456"`
	MobileNumber   *string `json:"mobile_number,omitempty" example:"0170123456"`
	Email          *string `json:"email,omitempty" example:"ops@example.local"`
	Note           *string `json:"note,omitempty" example:"Night operations supported"`
	IsActive       *bool   `json:"is_active,omitempty" example:"true"`
}

type ICAOUpdateData struct {
	Type       string               `json:"type" validate:"required,oneof=icao_update icao" example:"icao_update"`
	ID         string               `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
	Attributes ICAOUpdateAttributes `json:"attributes" validate:"required"`
}

type ICAOUpdateRequest struct {
	Data ICAOUpdateData `json:"data" validate:"required"`
}
