export interface AssignableUser {
  id: string;
  name: string;
  email: string;
}

/** @deprecated Use AssignableUser */
export type AgentUser = AssignableUser;

export interface TicketFormSubcategory {
  id: string;
  name_en: string;
  name_ar: string;
}

export interface TicketFormCategory {
  id: string;
  name_en: string;
  name_ar: string;
  subcategories: TicketFormSubcategory[];
}

export interface TicketFormPriority {
  id: string;
  name_en: string;
  name_ar: string;
  color: string;
  sort_order: number;
}

export interface TicketFormStatus {
  id: string;
  name_en: string;
  name_ar: string;
  color: string;
  is_closed: boolean;
  sort_order: number;
}

export interface TicketFormOptions {
  categories: TicketFormCategory[];
  statuses: TicketFormStatus[];
  priorities: TicketFormPriority[];
}

export interface CreateTicketPayload {
  department_id: string;
  subject: string;
  description: string;
  category_id?: string;
  subcategory_id?: string;
  priority_id?: string;
  assignee_id?: string;
}

function isAssignableUser(value: unknown): value is AssignableUser {
  if (typeof value !== 'object' || value === null) {
    return false;
  }
  const u = value as Record<string, unknown>;
  return typeof u.id === 'string' && typeof u.name === 'string' && typeof u.email === 'string';
}

export function isAssignableUserList(value: unknown): value is AssignableUser[] {
  return Array.isArray(value) && value.every(isAssignableUser);
}

/** @deprecated Use isAssignableUserList */
export function isAgentUserList(value: unknown): value is AssignableUser[] {
  return isAssignableUserList(value);
}

function isTicketFormCategory(value: unknown): value is TicketFormCategory {
  if (typeof value !== 'object' || value === null) {
    return false;
  }
  const c = value as Record<string, unknown>;
  return (
    typeof c.id === 'string' &&
    typeof c.name_en === 'string' &&
    Array.isArray(c.subcategories)
  );
}

function isTicketFormStatus(value: unknown): value is TicketFormStatus {
  if (typeof value !== 'object' || value === null) {
    return false;
  }
  const status = value as Record<string, unknown>;
  return typeof status.id === 'string' && typeof status.name_en === 'string';
}

function isTicketFormPriority(value: unknown): value is TicketFormPriority {
  if (typeof value !== 'object' || value === null) {
    return false;
  }
  const priority = value as Record<string, unknown>;
  return typeof priority.id === 'string' && typeof priority.name_en === 'string';
}

export function isTicketFormOptions(value: unknown): value is TicketFormOptions {
  if (typeof value !== 'object' || value === null) {
    return false;
  }
  const o = value as Record<string, unknown>;
  return (
    Array.isArray(o.categories) &&
    o.categories.every(isTicketFormCategory) &&
    Array.isArray(o.statuses) &&
    o.statuses.every(isTicketFormStatus) &&
    Array.isArray(o.priorities) &&
    o.priorities.every(isTicketFormPriority)
  );
}
