export type Status = string;

export interface Guest {
  id: string;
  name: string;
  mobile: string;
  email: string;
  city: string;
  state: string;
  country: string;
  membership: "Gold" | "Platinum" | "Infinity" | "None";
  points: number;
  upcomingTrip: string;
  activeTrip: string;
  profileCompletion: number;
  lastTravelDate: string;
  status: "Active" | "Inactive" | "Blocked";
  createdDate: string;
  gender: string;
  dob: string;
  address: string;
  language: string;
  communication: string;
  passportNumber: string;
  passportExpiry: string;
  passportStatus: "Verified" | "Pending Verification" | "Expiring Soon" | "Expired";
  nationality: string;
  emergencyName: string;
  emergencyRelation: string;
  emergencyMobile: string;
  diet: string;
  allergies: string;
  roomPreference: string;
  bedPreference: string;
  travelPace: string;
  interests: string;
  mobility: string;
  healthNotes: string;
  insurance: string;
}

export interface Tour {
  id: string;
  name: string;
  destination: string;
  scope: "Domestic" | "International";
  duration: number;
  startingPrice: number;
  status: "Active" | "Inactive";
  featured: boolean;
  membershipEligible: boolean;
  rewardEligible: boolean;
  published: "Draft" | "Review" | "Published" | "Unpublished" | "Archived";
  lastUpdated: string;
}

export interface Destination {
  id: string;
  name: string;
  country: string;
  region: string;
  bestTime: string;
  travelStyle: string;
  featured: boolean;
  status: "Active" | "Inactive";
}

export interface Trip {
  id: string;
  tourId: string;
  tour: string;
  destination: string;
  scope: "Domestic" | "International";
  originCity: string;
  originAirport: string;
  group: string;
  guests: number;
  departure: string;
  returnDate: string;
  days: number;
  status: "Draft" | "Confirmed" | "Upcoming" | "Active" | "Completed" | "Cancelled" | "Archived";
  tourManager: string;
  hotel: string;
  paymentStatus: "Paid" | "Partial" | "Pending";
  visaStatus: "Approved" | "Applied" | "Pending" | "Not Required";
  documentStatus: "Complete" | "Pending" | "Issues";
}

export interface Booking {
  id: string;
  guestId: string;
  guest: string;
  trip: string;
  tour: string;
  destination: string;
  bookingDate: string;
  travellers: number;
  amount: number;
  source: string;
  status: "Confirmed" | "Provisional" | "Cancelled";
}

export interface ItineraryRow {
  id: string;
  tripId: string;
  day: number;
  date: string;
  city: string;
  hotel: string;
  activity: string;
  startTime: string;
  endTime: string;
  meetingPoint: string;
  transport: string;
  meal: string;
  tourManager: string;
  contact: string;
  walkingLevel: "Low" | "Moderate" | "High";
  dressCode: string;
  whatToCarry: string;
  notes: string;
}

export interface Hotel {
  id: string;
  name: string;
  city: string;
  country: string;
  destination: string;
  rating: number;
  address: string;
  phone: string;
  email: string;
  roomTypes: string;
  facilities: string;
  status: "Active" | "Inactive";
}

export interface TripHotel {
  id: string;
  tripId: string;
  hotelId: string;
  hotel: string;
  city: string;
  country: string;
  destination: string;
  checkIn: string;
  checkOut: string;
  nights: number;
  rooms: number;
  guests: number;
  mealPlan: string;
  contact: string;
  confirmation: string;
  status: "Confirmed" | "Awaiting confirmation" | "Cancelled";
}

export interface Flight {
  id: string;
  direction: "Outbound" | "Return" | "Internal";
  airline: string;
  flightNumber: string;
  date: string;
  departure: string;
  arrival: string;
  departureAirport: string;
  arrivalAirport: string;
  terminal: string;
  baggage: string;
  pnr: string;
  trip: string;
  status: "Scheduled" | "Delayed" | "Departed" | "Cancelled";
}

export interface Transport {
  id: string;
  leg: string;
  route: string;
  type: string;
  vehicle: string;
  driver: string;
  driverContact: string;
  pickup: string;
  drop: string;
  meetingPoint: string;
  date: string;
  time: string;
  trip: string;
  status: "Scheduled" | "Completed" | "Cancelled";
}

export interface TourManager {
  id: string;
  name: string;
  mobile: string;
  email: string;
  languages: string;
  experience: number;
  availability: "Available" | "On Trip" | "On Leave";
  assignedTrips: number;
  status: "Active" | "Inactive";
}

export interface Payment {
  id: string;
  tripId: string;
  tour: string;
  destination: string;
  guestId: string;
  guest: string;
  bookingId: string;
  totalCost: number;
  discount: number;
  rewardsUsed: number;
  netPayable: number;
  paid: number;
  due: number;
  dueDate: string;
  lastPaymentDate: string;
  mode: string;
  reference: string;
  receipt: string;
  status: "Paid" | "Partial" | "Pending" | "Failed" | "Refunded" | "Processing";
}

export interface Transaction {
  id: string;
  trip: string;
  guest: string;
  guestId: string;
  bookingId: string;
  date: string;
  amount: number;
  method: string;
  reference: string;
  status: "Paid" | "Pending" | "Failed" | "Refunded" | "Processing";
  receipt: string;
  invoice: string;
}

export interface DocumentRow {
  id: string;
  guestId: string;
  guest: string;
  trip: string;
  tour: string;
  departure: string;
  type: string;
  name: string;
  uploadedDate: string;
  expiry: string;
  status: "Uploaded" | "Pending" | "Verified" | "Rejected" | "Expired" | "Expiring Soon";
  verification: string;
  notes: string;
}

export interface RewardTxn {
  id: string;
  guestId: string;
  guest: string;
  date: string;
  type: "Earned" | "Redeemed" | "Referral" | "Joining Bonus" | "Expired" | "Manual Adjustment";
  trip: string;
  points: number;
  status: "Available" | "Used" | "Expired" | "Pending";
  expiry: string;
  reference: string;
}

export interface Referral {
  id: string;
  referrer: string;
  referral: string;
  date: string;
  status: "Invited" | "Registered" | "Booked" | "Travel Completed" | "Reward Credited" | "Invalid";
  booking: string;
  trip: string;
  reward: number;
  rewardStatus: "Pending" | "Credited" | "Not Applicable";
}

export interface MembershipTier {
  id: string;
  name: string;
  qualification: string;
  points: number;
  benefits: string;
  status: "Active" | "Inactive";
  sortOrder: number;
  effectiveDate: string;
}

export interface RewardRule {
  id: string;
  rule: string;
  value: string;
  appliesTo: string;
  expiryMonths: number;
  status: "Active" | "Inactive";
}

export interface WishlistRow {
  id: string;
  guest: string;
  tour: string;
  destination: string;
  savedDate: string;
  status: "Saved" | "Booked" | "Removed";
}

export interface CommunityPost {
  id: string;
  guest: string;
  type: "Post" | "Story" | "Photo" | "Recommendation" | "Review";
  destination: string;
  trip: string;
  createdDate: string;
  likes: number;
  comments: number;
  status: "Published" | "Hidden" | "Pending" | "Rejected";
  reported: boolean;
  featured: boolean;
}

export interface ModerationRow {
  id: string;
  post: string;
  author: string;
  reporter: string;
  reason: string;
  date: string;
  status: "Open" | "Resolved" | "Escalated";
}

export interface ContentRow {
  id: string;
  section: string;
  title: string;
  subtitle: string;
  cta: string;
  link: string;
  order: number;
  startDate: string;
  endDate: string;
  audience: string;
  status: "Draft" | "Review" | "Published" | "Unpublished" | "Archived";
}

export interface NotificationRow {
  id: string;
  title: string;
  channel: "Push" | "Email" | "SMS" | "In-app";
  purpose: "Travel" | "Payment" | "Loyalty" | "Community" | "Promotion" | "System";
  audience: string;
  scheduled: string;
  sent: number;
  opened: number;
  status: "Draft" | "Scheduled" | "Sent" | "Cancelled";
}

export interface ImportRun {
  id: string;
  module: string;
  date: string;
  rows: number;
  success: number;
  errors: number;
  importedBy: string;
  status: "Completed" | "Completed with errors" | "Failed";
}

export interface UserRow {
  id: string;
  name: string;
  email: string;
  role: string;
  lastLogin: string;
  status: "Active" | "Invited" | "Disabled";
}

export interface AuditRow {
  id: string;
  user: string;
  action: string;
  module: string;
  record: string;
  date: string;
  oldValue: string;
  newValue: string;
}
