package ninjavan

/*
CreateShipmentRequest
{
    "marketplace": {
        "seller_id": "John-Doe-Shop",
        "seller_company_name": "John Doe Shop"
    },
    "service_type": "Marketplace",
    "service_level": "Standard",
    "requested_tracking_number": "1234-56789",
    "reference": {
        "merchant_order_number": "SHIP-1234-56789"
    },
    "from": {
        "name": "John Doe",
        "phone_number": "+60138201527",
        "email": "john.doe@gmail.com",
        "address": {
            "address1": "17 Lorong Jambu 3",
            "address2": "",
            "area": "Taman Sri Delima",
            "city": "Simpang Ampat",
            "state": "Pulau Pinang",
            "address_type": "office",
            "country": "MY",
            "postcode": "51200"
        }
    },
    "to": {
        "name": "Jane Doe",
        "phone_number": "+60103067174",
        "email": "jane.doe@gmail.com",
        "address": {
            "address1": "Jalan PJU 8/8",
            "address2": "",
            "area": "Damansara Perdana",
            "city": "Petaling Jaya",
            "state": "Selangor",
            "address_type": "home",
            "country": "MY",
            "postcode": "47820"
        }
    },
    "parcel_job": {
        "is_pickup_required": true,
        "pickup_address_id": "98989012",
        "pickup_service_type": "Scheduled",
        "pickup_service_level": "Standard",
        "pickup_date": "2021-12-15",
        "pickup_timeslot": {
            "start_time": "09:00",
            "end_time": "12:00",
            "timezone": "Asia/Kuala_Lumpur"
        },
        "pickup_instructions": "Pickup with care!",
        "delivery_instructions": "If recipient is not around, leave parcel in power riser.",
        "delivery_start_date": "2021-12-16",
        "delivery_timeslot": {
            "start_time": "09:00",
            "end_time": "12:00",
            "timezone": "Asia/Kuala_Lumpur"
        },
        "dimensions": {
            "weight": 1.5
        },
        "items": [{
            "item_description": "Sample description",
            "quantity": 1,
            "is_dangerous_good": false
        }]
    }
}
*/
type CreateShipmentRequest struct {
	MerchantCode    string `json:"merchant_code" mapstructure:"merchant_code"`
	ReferenceNumber string `json:"reference_number" mapstructure:"reference_number"`
	ServiceCode     string `json:"service_code" mapstructure:"service_code"`
}

/*
CreateShipmentResponse
{
    "requested_tracking_number": "1234-56789",
    "tracking_number": "PREFIX1234-56789",
    "service_type": "Parcel",
    "service_level": "Standard",
    "reference": {
        "merchant_order_number": "SHIP-1234-56789"
    },
    "from": {
        "name": "John Doe",
        "phone_number": "+60138201527",
        "email": "john.doe@gmail.com",
        "address": {
            "address1": "17 Lorong Jambu 3",
            "address2": "",
            "area": "Taman Sri Delima",
            "city": "Simpang Ampat",
            "state": "Pulau Pinang",
            "address_type": "office",
            "country": "MY",
            "postcode": "51200"
        }
    },
    "to": {
        "name": "Jane Doe",
        "phone_number": "+60103067174",
        "email": "jane.doe@gmail.com",
        "address": {
            "address1": "Jalan PJU 8/8",
            "address2": "",
            "area": "Damansara Perdana",
            "city": "Petaling Jaya",
            "state": "Selangor",
            "address_type": "home",
            "country": "MY",
            "postcode": "47820"
        }
    },
    "parcel_job": {
        "is_pickup_required": true,
        "pickup_service_type": "Scheduled",
        "pickup_service_level": "Standard",
        "pickup_address_id": "98989012",
        "pickup_date": "2021-12-15",
        "pickup_timeslot": {
            "start_time": "09:00",
            "end_time": "12:00",
            "timezone": "Asia/Kuala_Lumpur"
        },
        "pickup_approximate_volume": "Less than 3 Parcels",
        "pickup_instructions": "Pickup with care!",
        "delivery_start_date": "2021-12-16",
        "delivery_timeslot": {
            "start_time": "09:00",
            "end_time": "12:00",
            "timezone": "Asia/Kuala_Lumpur"
        },
        "delivery_instructions": "If recipient is not around, leave parcel in power riser.",
        "allow-weekend_delivery": true,
        "dimensions": {
            "weight": 1.5
        },
        "items": [{
            "item_description": "Sample description",
            "quantity": 1,
            "is_dangerous_good": false
        }]
    }
}
*/
type CreateShipmentResponse struct {
	RequestedTrackingNumber string `json:"requested_tracking_number" mapstructure:"requested_tracking_number"`
	TrackingNumber          string `json:"tracking_number" mapstructure:"tracking_number"`
}

type CancelShipmentRequest struct {
	Type string `json:"type" mapstructure:"type"`
}

type CancelShipmentResponse struct {
	Success []string `json:"success" mapstructure:"success"`
}

type LoginResponse struct {
	AccessToken string `json:"access_token" mapstructure:"access_token"`
	Expires     string `json:"expires" mapstructure:"expires"`
	ExpiresIn   string `json:"expires_in" mapstructure:"expires_in"`
	Bearer      string `json:"bearer" mapstructure:"bearer"`
}

/*
ErrorResponse
{
    "error": {
        "request_id": "1ba6da4f-0709-416e-9e30-a5546130b4d2",
        "title": "Invalid Data",
        "message": "Please check your request payload for validation errors.",
        "details": [{
            "reason": "Validation Error",
            "message": "Service Level is not supported for this shipper account"
        }]
    }
}
*/

type ErrorResponse struct {
	Error ErrorResponseData `json:"error"`
}

type ErrorResponseData struct {
	Code    string                    `json:"code" mapstructure:"code"`
	Title   string                    `json:"title" mapstructure:"title"`
	Message string                    `json:"message" mapstructure:"message"`
	Details []ErrorResponseDataDetail `json:"details" mapstructure:"details"`
}

type ErrorResponseDataDetail struct {
	Reason  string `json:"reason" mapstructure:"reason"`
	Field   string `json:"field" mapstructure:"field"`
	Message string `json:"message" mapstructure:"message"`
}
