/**
 * Data Transfer Object (DTO) for course information responses.
 * This DTO defines the structure of course data returned by the API.
 * It represents comprehensive information about a course, including
 * institutional details, fees, duration, location, and categorization.
 *
 * This is typically used as a response DTO in course listing,
 * search, or detail endpoints to ensure consistent data formatting.
 *
 * @example
 * // Example response from a course search API:
 * {
 *   "course_id": 12345,
 *   "institue_id": 789,
 *   "currency": "USD",
 *   "course_name": "Master of Computer Science",
 *   "application_fee": 100,
 *   "tution_fee_international": "25000",
 *   "tution_fee_per_duration": 12500,
 *   "duration_type": 2,
 *   "duration": 24,
 *   "max_duration": null,
 *   "course_uid": "CS-MSC-2024-001",
 *   "course_website_url": "https://example.com/cs-msc",
 *   "institute_website_url": "https://university.edu",
 *   "college_uid": "ENG-001",
 *   "campus_id": 5,
 *   "city_id": 100,
 *   "state_id": 10,
 *   "country_id": 1,
 *   "campus_name": "Downtown Campus",
 *   "campus_association_type_id": 1,
 *   "country_name": "United States",
 *   "city_name": "Boston",
 *   "state_name": "Massachusetts",
 *   "review_status": 2,
 *   "institute_name": "Tech University",
 *   "institute_notes": "Top-ranked CS program",
 *   "institute_type": 1,
 *   "college_id": 50,
 *   "study_levels": "Postgraduate",
 *   "streams": "Computer Science",
 *   "sub_streams": "Artificial Intelligence, Cybersecurity",
 *   "intakes": "Fall 2024,Spring 2025"
 * }
 */
export class CoursesResponseDto {
  /** Unique identifier for the course */
  course_id: number;

  /** Identifier of the institution offering the course (Note: typo in property name - should be 'institute_id') */
  institue_id: number;

  /** Currency code for all monetary values (e.g., "USD", "EUR", "GBP") */
  currency: string;

  /** Name of the course/program */
  course_name: string;

  /** Application fee for the course (nullable) */
  application_fee: number | null;

  /** International tuition fee as a string (might include formatting or range) */
  tution_fee_international: string; // Note: typo - should be 'tuition_fee_international'

  /** Tuition fee per duration unit (semester, year, etc.) */
  tution_fee_per_duration: number; // Note: typo - should be 'tuition_fee_per_duration'

  /** Type of duration unit (1: months, 2: years, 3: semesters, etc.) */
  duration_type: number;

  /** Standard duration of the course in duration_type units */
  duration: number;

  /** Maximum possible duration if flexible (nullable) */
  max_duration: number | null;

  /** Unique alphanumeric identifier for the course (for external reference) */
  course_uid: string;

  /** Direct URL to the course page/website */
  course_website_url: string;

  /** URL to the main institute/college website */
  institute_website_url: string;

  /** Unique identifier for the college/department */
  college_uid: string;

  /** Identifier for the specific campus where course is offered */
  campus_id: number;

  /** Identifier of the city where campus is located */
  city_id: number;

  /** Identifier of the state/province where campus is located */
  state_id: number;

  /** Identifier of the country where campus is located */
  country_id: number;

  /** Name of the campus */
  campus_name: string;

  /** Type of campus association (main campus, satellite, online, etc.) */
  campus_association_type_id: number;

  /** Name of the country */
  country_name: string;

  /** Name of the city */
  city_name: string;

  /** Name of the state/province/region */
  state_name: string;

  /** Review/approval status of the course (e.g., 1: draft, 2: published, 3: archived) */
  review_status: number;

  /** Name of the institution/university */
  institute_name: string;

  /** Additional notes about the institution (nullable) */
  institute_notes: string | null;

  /** Type of institution (public, private, community college, etc.) (nullable) */
  institute_type: number | null;

  /** Internal college/department identifier (nullable) */
  college_id: number | null;

  /** Study levels (e.g., "Undergraduate,Postgraduate") - comma-separated string */
  study_levels: string;

  /** Academic streams/disciplines (e.g., "Engineering,Business") - comma-separated string */
  streams: string;

  /** Sub-specializations within streams (e.g., "Mechanical,Electrical") - comma-separated string */
  sub_streams: string;

  /** Available intake periods (e.g., "September,January,May") - comma-separated string */
  intakes: string;
}
