/**
 * HTTP Protocol Type Definitions
 */

import type { THttpMethod, THttpVersion, HttpStatus } from './constants.js';

/**
 * HTTP request line structure
 */
export interface IHttpRequestLine {
  method: THttpMethod;
  path: string;
  version: THttpVersion;
}

/**
 * HTTP response line structure
 */
export interface IHttpResponseLine {
  version: THttpVersion;
  status: HttpStatus;
  statusText: string;
}

/**
 * HTTP header structure
 */
export interface IHttpHeader {
  name: string;
  value: string;
}

/**
 * HTTP message structure (base for request and response)
 */
export interface IHttpMessage {
  headers: Record<string, string>;
  body?: Buffer;
}

/**
 * HTTP request structure
 */
export interface IHttpRequest extends IHttpMessage {
  method: THttpMethod;
  path: string;
  version: THttpVersion;
  query?: Record<string, string>;
}

/**
 * HTTP response structure  
 */
export interface IHttpResponse extends IHttpMessage {
  status: HttpStatus;
  statusText: string;
  version: THttpVersion;
}

/**
 * Parsed URL structure
 */
export interface IParsedUrl {
  protocol?: string;
  hostname?: string;
  port?: number;
  path?: string;
  query?: string;
  fragment?: string;
}