-- This source code is distributed under the terms of a MIT license,
-- Copyright (c) 2016-present, SoundCloud Ltd.
-- All rights reserved.
--
-- This source code is distributed under the terms of a MIT license,
-- found in the LICENSE file.

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeOperators #-}

module Main where

import Control.Monad (void)
import Control.Monad.Trans.Either
import Control.Monad.IO.Class
import Servant.API
import Servant.Client

import Data.List.Split (splitOn)
import Network.URI (URI (..), URIAuth (..), parseURI)
import Data.Maybe (fromMaybe)
import Test.QuickCheck
import Control.Monad
import Kubernetes.Model.V1.Node
import Kubernetes.Model.V1.PersistentVolumeClaimList
import Kubernetes.Model.V1.ObjectFieldSelector
import Kubernetes.Model.V1.SELinuxOptions
import Kubernetes.Model.V1.ContainerStateRunning
import Kubernetes.Model.V1.VolumeMount
import Kubernetes.Model.V1.PersistentVolumeClaimSpec
import Kubernetes.Model.V1.CephFSVolumeSource
import Kubernetes.Model.V1.DownwardAPIVolumeSource
import Kubernetes.Model.Unversioned.StatusCause
import Kubernetes.Model.V1.GCEPersistentDiskVolumeSource
import Kubernetes.Model.V1.ResourceQuotaSpec
import Kubernetes.Model.V1.NamespaceStatus
import Kubernetes.Model.V1.NamespaceSpec
import Kubernetes.Model.V1.PersistentVolume
import Kubernetes.Model.V1.ConfigMapList
import Kubernetes.Model.V1.PersistentVolumeStatus
import Kubernetes.Model.V1.EndpointsList
import Kubernetes.Model.V1.GitRepoVolumeSource
import Kubernetes.Model.V1.ConfigMap
import Kubernetes.Model.V1.Capabilities
import Kubernetes.Model.V1.PodTemplateList
import Kubernetes.Model.V1.NodeCondition
import Kubernetes.Model.V1.LocalObjectReference
import Kubernetes.Model.V1.ResourceQuotaStatus
import Kubernetes.Model.V1.ExecAction
import Kubernetes.Model.V1.ObjectMeta
import Kubernetes.Model.V1.LimitRangeSpec
import Kubernetes.Model.V1.ISCSIVolumeSource
import Kubernetes.Model.V1.EmptyDirVolumeSource
import Kubernetes.Model.V1.NodeList
import Kubernetes.Model.Unversioned.Patch
import Kubernetes.Model.V1.PersistentVolumeClaim
import Kubernetes.Model.V1.NamespaceList
import Kubernetes.Model.V1.ServiceAccount
import Kubernetes.Model.V1.NodeAddress
import Kubernetes.Model.V1.Namespace
import Kubernetes.Model.V1.FlockerVolumeSource
import Kubernetes.Model.V1.PersistentVolumeClaimVolumeSource
import Kubernetes.Model.Unversioned.ListMeta
import Kubernetes.Model.V1.ResourceQuotaList
import Kubernetes.Model.V1.PersistentVolumeClaimStatus
import Kubernetes.Model.V1.EndpointSubset
import Kubernetes.Model.V1.SecretVolumeSource
import Kubernetes.Model.V1.FlexVolumeSource
import Kubernetes.Model.V1.EnvVarSource
import Kubernetes.Model.V1.LoadBalancerIngress
import Kubernetes.Model.V1.Service
import Kubernetes.Model.V1.ServiceAccountList
import Kubernetes.Model.V1.LimitRangeList
import Kubernetes.Model.V1.Endpoints
import Kubernetes.Model.V1.DeleteOptions
import Kubernetes.Model.V1.Volume
-- import Kubernetes.Model.integer
import Kubernetes.Model.V1.Probe
import Kubernetes.Model.V1.SecretKeySelector
import Kubernetes.Model.V1.ReplicationController
import Kubernetes.Model.V1.Capability
import Kubernetes.Model.V1.LimitRange
import Kubernetes.Model.V1.DownwardAPIVolumeFile
import Kubernetes.Model.V1.PodStatus
import Kubernetes.Model.V1.PodSpec
import Kubernetes.Model.V1.ContainerPort
import Kubernetes.Model.V1.ResourceQuota
import Kubernetes.Model.V1.EventList
import Kubernetes.Model.V1.Lifecycle
import Kubernetes.Model.V1.ReplicationControllerSpec
import Kubernetes.Model.V1.NodeStatus
import Kubernetes.Model.V1.GlusterfsVolumeSource
import Kubernetes.Model.V1.Handler
import Kubernetes.Model.V1.EventSource
import Kubernetes.Model.V1.PodCondition
import Kubernetes.Model.V1.RBDVolumeSource
import Kubernetes.Model.V1.PodTemplate
import Kubernetes.Model.V1.ServiceStatus
import Kubernetes.Model.V1.NFSVolumeSource
import Kubernetes.Model.V1.FCVolumeSource
import Kubernetes.Model.V1.EndpointPort
import Kubernetes.Model.V1.TCPSocketAction
import Kubernetes.Model.Unversioned.StatusDetails
import Kubernetes.Model.V1.HTTPGetAction
import Kubernetes.Model.V1.LoadBalancerStatus
import Kubernetes.Model.V1.SecretList
import Kubernetes.Model.V1.Container
import Kubernetes.Model.V1.PersistentVolumeSpec
import Kubernetes.Model.V1.PodSecurityContext
import Kubernetes.Model.V1.ReplicationControllerStatus
import Kubernetes.Model.V1.FinalizerName
import Kubernetes.Model.V1.ServicePort
import Kubernetes.Model.V1.ComponentCondition
import Kubernetes.Model.V1.ComponentStatusList
import Kubernetes.Model.V1.HostPathVolumeSource
import Kubernetes.Model.Json.WatchEvent
import Kubernetes.Model.V1.ContainerStateTerminated
import Kubernetes.Model.V1.Binding
import Kubernetes.Model.V1.CinderVolumeSource
import Kubernetes.Model.V1.ContainerState
import Kubernetes.Model.V1.SecurityContext
import Kubernetes.Model.V1.AWSElasticBlockStoreVolumeSource
import Kubernetes.Model.V1.ContainerStatus
import Kubernetes.Model.V1.ContainerImage
import Kubernetes.Model.V1.ReplicationControllerList
import Kubernetes.Model.V1.NodeDaemonEndpoints
import Kubernetes.Model.V1.Secret
import Kubernetes.Model.V1.Event
import Kubernetes.Model.V1.EnvVar
import Kubernetes.Model.V1.ResourceRequirements
import Kubernetes.Model.V1.PersistentVolumeAccessMode
import Kubernetes.Model.V1.ComponentStatus
import Kubernetes.Model.V1.LimitRangeItem
import Kubernetes.Model.V1.PodTemplateSpec
import Kubernetes.Model.V1.PodList
import Kubernetes.Model.V1.ServiceList
import Kubernetes.Model.V1.PersistentVolumeList
import Kubernetes.Model.V1.ObjectReference
import Kubernetes.Model.V1.ContainerStateWaiting
import Kubernetes.Model.Unversioned.Status
import Kubernetes.Model.V1.ConfigMapKeySelector
import Kubernetes.Model.V1.NodeSystemInfo
import Kubernetes.Model.V1.ServiceSpec
import Kubernetes.Model.V1.Pod
import Kubernetes.Model.V1.NodeSpec
import Kubernetes.Model.V1.EndpointAddress
import Kubernetes.Model.V1.DaemonEndpoint
import Kubernetes.Api.ApivApi

-- userClient :: IO ()
-- userClient = do 
--     users <- sample' (arbitrary :: Gen String)
--     let user = last users
--     void . runEitherT $ do
--         getUserByName user >>= (liftIO . putStrLn . show)

main :: IO ()
main = putStrLn "Hello Server!"
