// Copyright Materialize, Inc. All rights reserved.
//
// Licensed 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 in the LICENSE file at the
// root of this repository, or online at
//
//     http://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.

use std::fmt;
use std::iter;

use reqwest::RequestBuilder;
use uuid::Uuid;

pub trait RequestBuilderExt {
    fn tenant(self, uuid: Uuid) -> RequestBuilder;
}

impl RequestBuilderExt for RequestBuilder {
    fn tenant(self, uuid: Uuid) -> RequestBuilder {
        self.header("Frontegg-Tenant-Id", uuid.to_string())
    }
}

pub trait StrIteratorExt {
    fn chain_one<S>(self, s: S) -> Vec<String>
    where
        S: fmt::Display;
}

impl<T> StrIteratorExt for T
where
    T: IntoIterator,
    T::Item: AsRef<str>,
{
    fn chain_one<S>(self, s: S) -> Vec<String>
    where
        S: fmt::Display,
    {
        self.into_iter()
            .map(|s| s.as_ref().into())
            .chain(iter::once(s.to_string()))
            .collect()
    }
}
