import type { PageResult } from '@/types/api';

/** 员工状态。 */
export type EmployeeStatus = 'ACTIVE' | 'DISABLED';

/** 员工响应体（EmployeeVO）。 */
export interface EmployeeVO {
  id: number;
  createdAt?: string;
  updatedAt?: string;
  createdBy?: string;
  updatedBy?: string;
  tenantId?: string;
  deleted?: number;
  name: string;
  phone: string;
  orgId: number;
  roleId: number;
  position?: string;
  email?: string;
  avatarUrl?: string;
  status: EmployeeStatus;
  holdLimit?: number;
  region?: string;
  hireDate?: string;
}

/** GET /tenant/employees 请求参数（EmployeePageQuery）。 */
export interface TenantEmployeeListRequest {
  page?: number;
  size?: number;
  sortBy?: string;
  sortDir?: string;
  orgId?: number;
  roleId?: number;
  status?: EmployeeStatus;
  keyword?: string;
}

/** GET /tenant/employees 响应数据（ResultPageResultEmployeeVO 的 data）。 */
export type TenantEmployeeListResponse = PageResult<EmployeeVO>;

/** POST /tenant/employees 请求体（EmployeeCreateDTO）。 */
export interface TenantEmployeeCreateRequest {
  name: string;
  phone: string;
  orgId: number;
  roleId: number;
  position?: string;
  email?: string;
  avatarUrl?: string;
  holdLimit?: number;
  region?: string;
}

/** POST /tenant/employees 响应数据（ResultEmployeeVO 的 data）。 */
export type TenantEmployeeCreateResponse = EmployeeVO;

/** GET /tenant/employees/{id} 请求参数。 */
export interface TenantEmployeeDetailRequest {
  /** 员工 ID（路径参数）。 */
  id: number;
}

/** GET /tenant/employees/{id} 响应数据（ResultEmployeeVO 的 data）。 */
export type TenantEmployeeDetailResponse = EmployeeVO;

/** PUT /tenant/employees/{id} 请求参数（路径参数 + EmployeeUpdateDTO）。 */
export interface TenantEmployeeUpdateRequest {
  /** 员工 ID（路径参数）。 */
  id: number;
  name?: string;
  phone?: string;
  orgId?: number;
  roleId?: number;
  position?: string;
  email?: string;
  holdLimit?: number;
  region?: string;
}

/** PUT /tenant/employees/{id} 请求体。 */
export type TenantEmployeeUpdateBody = Omit<TenantEmployeeUpdateRequest, 'id'>;

/** PUT /tenant/employees/{id} 响应数据（ResultEmployeeVO 的 data）。 */
export type TenantEmployeeUpdateResponse = EmployeeVO;

/** DELETE /tenant/employees/{id} 请求参数。 */
export interface TenantEmployeeDeleteRequest {
  /** 员工 ID（路径参数）。 */
  id: number;
}

/** DELETE /tenant/employees/{id} 响应数据（ResultVoid 的 data）。 */
export type TenantEmployeeDeleteResponse = void;

/** GET /tenant/employees/export 请求参数。 */
export interface TenantEmployeeExportRequest {
  /** 不填导出全部，填则仅导出指定组织。 */
  orgId?: number;
}

/** GET /tenant/employees/export 响应数据（Excel 文件流）。 */
export type TenantEmployeeExportResponse = Blob;

/** POST /tenant/employees/import 请求参数（multipart/form-data，字段名 file）。 */
export interface TenantEmployeeImportRequest {
  file: File;
}

/** POST /tenant/employees/import 响应数据（成功导入行数）。 */
export type TenantEmployeeImportResponse = number;

/** GET /tenant/organizations/tree 请求参数。 */
export interface TenantOrgTreeRequest {
  orgId?: number;
}

/** 组织树节点（OrgVO 子集）。 */
export interface OrgTreeNode {
  id: number;
  orgName: string;
  status?: boolean;
  children?: OrgTreeNode[];
}

/** GET /tenant/organizations/tree 响应数据（ResultListOrgVO 的 data）。 */
export type TenantOrgTreeResponse = OrgTreeNode[];

/** GET /tenant/roles 请求参数：该接口未定义查询参数。 */
export type TenantRoleOptionRequest = Record<string, never>;

/** 角色选项（RoleVO 子集）。 */
export interface RoleOption {
  id: number;
  roleName: string;
  status?: string;
}

/** GET /tenant/roles 响应数据（ResultListRoleVO 的 data）。 */
export type TenantRoleOptionResponse = RoleOption[];

/** ProTable 搜索参数，与 EmployeePageQuery 中可筛选字段一致。 */
export interface EmployeeListQuery {
  keyword?: string;
  status?: EmployeeStatus;
  orgId?: number;
  roleId?: number;
}

/** 新增 / 编辑 / 详情表单值。 */
export interface EmployeeFormValues {
  name: string;
  phone: string;
  /** 所属组织级联选择路径，最后一项为实际的 orgId。 */
  orgPath: number[];
  roleId: number;
  position?: string;
  email?: string;
  holdLimit?: number;
  region?: string;
}

/** 下拉选项。 */
export interface SelectOption {
  label: string;
  value: number;
}
