import {
  IIssue,
  IIssueActivity,
  IIssueLite,
  IWorkspace,
  IWorkspaceLite,
  NestedKeyOf,
  Properties,
  TStateGroups,
} from ".";

export interface IUser {
  avatar: string;
  cover_image: string | null;
  created_at: readonly Date;
  created_location: readonly string;
  date_joined: readonly Date;
  email: string;
  display_name: string;
  first_name: string;
  id: readonly string;
  is_email_verified: boolean;
  is_onboarded: boolean;
  is_tour_completed: boolean;
  last_location: readonly string;
  last_login: readonly Date;
  last_name: string;
  mobile_number: string;
  my_issues_prop: {
    properties: Properties;
    groupBy: NestedKeyOf<IIssue> | null;
  } | null;
  onboarding_step: TOnboardingSteps;
  role: string;
  token: string;
  theme: ICustomTheme;
  updated_at: readonly Date;
  username: string;
  user_timezone: string;

  [...rest: string]: any;
}

export interface ICustomTheme {
  background: string;
  text: string;
  primary: string;
  sidebarBackground: string;
  sidebarText: string;
  darkPalette: boolean;
  palette: string;
  theme: string;
}

export interface ICurrentUserResponse extends IUser {
  assigned_issues: number;
  last_workspace_id: string | null;
  workspace_invites: number;
  workspace: {
    fallback_workspace_id: string | null;
    fallback_workspace_slug: string | null;
    invites: number;
    last_workspace_id: string | null;
    last_workspace_slug: string | null;
  };
}
export interface IUserLite {
  avatar: string;
  created_at: Date;
  display_name: string;
  first_name: string;
  readonly id: string;
  is_bot: boolean;
  last_name: string;
}

export interface IUserMemberLite extends IUserLite {
  email: string;
}

export interface IUserActivity {
  created_date: string;
  activity_count: number;
}

export interface IUserPriorityDistribution {
  priority: string;
  priority_count: number;
}

export interface IUserStateDistribution {
  state_group: TStateGroups;
  state_count: number;
}

export interface IUserWorkspaceDashboard {
  assigned_issues_count: number;
  completed_issues_count: number;
  issue_activities: IUserActivity[];
  issues_due_week_count: number;
  overdue_issues: IIssueLite[];
  completed_issues: {
    week_in_month: number;
    completed_count: number;
  }[];
  pending_issues_count: number;
  state_distribution: IUserStateDistribution[];
  upcoming_issues: IIssueLite[];
}

export interface IUserActivityResponse {
  count: number;
  extra_stats: null;
  next_cursor: string;
  next_page_results: boolean;
  prev_cursor: string;
  prev_page_results: boolean;
  results: IIssueActivity[];
  total_pages: number;
}

export type UserAuth = {
  isMember: boolean;
  isOwner: boolean;
  isViewer: boolean;
  isGuest: boolean;
};

export type TOnboardingSteps = {
  profile_complete: boolean;
  workspace_create: boolean;
  workspace_invite: boolean;
  workspace_join: boolean;
};

export interface IUserProfileData {
  assigned_issues: number;
  completed_issues: number;
  created_issues: number;
  pending_issues: number;
  priority_distribution: IUserPriorityDistribution[];
  state_distribution: IUserStateDistribution[];
  subscribed_issues: number;
}

export interface IUserProfileProjectSegregation {
  project_data: {
    assigned_issues: number;
    completed_issues: number;
    created_issues: number;
    emoji: string | null;
    icon_prop: null;
    id: string;
    identifier: string;
    name: string;
    pending_issues: number;
  }[];
  user_data: {
    avatar: string;
    cover_image: string | null;
    date_joined: Date;
    display_name: string;
    first_name: string;
    last_name: string;
    user_timezone: string;
  };
}

export interface ICurrentUser {
  id: readonly string;
  avatar: string;
  first_name: string;
  last_name: string;
  username: string;
  email: string;
  mobile_number: string;
  is_email_verified: boolean;
  is_tour_completed: boolean;
  onboarding_step: TOnboardingSteps;
  is_onboarded: boolean;
  role: string;
}

export interface ICustomTheme {
  background: string;
  text: string;
  primary: string;
  sidebarBackground: string;
  sidebarText: string;
  darkPalette: boolean;
  palette: string;
  theme: string;
}

export interface ICurrentUserSettings {
  theme: ICustomTheme;
}