using System.Net;
using TweetLib.Browser.Interfaces;

namespace TweetLib.Browser.Request {
	public abstract class SchemeResource {
		private SchemeResource() {}

		public abstract T Visit<T>(ISchemeResourceVisitor<T> visitor);

		public sealed class Status : SchemeResource {
			public HttpStatusCode Code { get; }
			public string Message { get; }

			public Status(HttpStatusCode code, string message) {
				Code = code;
				Message = message;
			}

			public override T Visit<T>(ISchemeResourceVisitor<T> visitor) {
				return visitor.Status(this);
			}
		}

		public sealed class File : SchemeResource {
			public byte[] Contents { get; }
			public string Extension { get; }

			public File(byte[] contents, string extension) {
				Contents = contents;
				Extension = extension;
			}

			public override T Visit<T>(ISchemeResourceVisitor<T> visitor) {
				return visitor.File(this);
			}
		}
	}
}