export type StakeholderType = {
  id: number;
  name: string;
};

export type StakeholderRelated = {
  id: number;
  name: string;
  stakeholderTypeId: number;
  logo: string | null;
  description: string | null;
  coChair: string | null;
  active: boolean;
};

export type Stakeholder = {
  id: number;
  name: string;
  stakeholderTypeId: number;
  stakeholderType: StakeholderType | null;
  logo: string | null;
  description: string | null;
  coChair: string | null;
  relatedStakeholderId: number | null;
  relatedStakeholder?: StakeholderRelated | null;
  active: boolean;
  createdAt: string;
  updatedAt: string;
  users?: StakeholderUser[];
};

export type StakeholderDetail = Stakeholder & {
  users: StakeholderUser[];
};

export type StakeholderFormPayload = {
  name: string;
  stakeholderTypeId: number;

  /**
   * Related stakeholder selected from the form.
   *
   * number = set related stakeholder
   * null = remove related stakeholder
   * undefined = do not send/change relation
   */
  relatedStakeholderId?: number | null;

  /**
   * Multipart upload.
   * The backend stores the resulting URL on the stakeholder row.
   */
  logoFile?: File | null;

  description?: string;
  active: boolean;
};

export type StakeholderUser = {
  id: number | string;
  email?: string;
  name?: string | null;
  role?: string;
  position?: string | null;
  avatar?: string | null;
  joinedAt?: string;
};

export type StakeholderUserPayload = {
  userId: number;
};

export type StakeholderTypeDashboardSummary = {
  id: number;
  name: string;
  stakeholderCount: number;
  activeStakeholderCount: number;
  inactiveStakeholderCount: number;
};

export type StakeholderDashboardSummary = {
  totalStakeholders: number;
  activeStakeholders: number;
  inactiveStakeholders: number;
  totalStakeholderTypes: number;
  totalAssignedUsers: number;
  stakeholderTypes: StakeholderTypeDashboardSummary[];
};

export type StakeholderListMeta = {
  page: number;
  limit: number;
  total: number;
  totalPages: number;
};

export type StakeholderListResult = {
  data: Stakeholder[];
  meta: StakeholderListMeta;
};

export type ApiResponse<T> = {
  success: boolean;
  statusCode: number;
  message: string;
  data: T;
  meta?: StakeholderListMeta;
  timestamp?: string;
  path?: string;
};
