<?php

/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

namespace Apache\Avro\Protocol;

use Apache\Avro\Schema\AvroName;
use Apache\Avro\Schema\AvroPrimitiveSchema;
use Apache\Avro\Schema\AvroRecordSchema;
use Apache\Avro\Schema\AvroSchema;

class AvroProtocolMessage
{
    public $name;

    /**
     * @var AvroRecordSchema $request
     */
    public $request;

    public $response;

    public function __construct($name, $avro, $protocol)
    {
        $this->name = $name;
        $this->request = new AvroRecordSchema(
            new AvroName($name, null, $protocol->namespace),
            null,
            $avro['request'],
            $protocol->schemata,
            AvroSchema::REQUEST_SCHEMA
        );

        if (array_key_exists('response', $avro)) {
            $this->response = $protocol->schemata->schemaByName(new AvroName(
                $avro['response'],
                $protocol->namespace,
                $protocol->namespace
            ));
            if ($this->response == null) {
                $this->response = new AvroPrimitiveSchema($avro['response']);
            }
        }
    }
}
