import type {
  InferSchema,
  Insertable,
  Selectable,
  Updateable,
} from "@tailor-platform/erp-kit/core";
import type { DB } from "../generated/kysely-tailordb";

export type Schema = InferSchema<DB>;

export type ApprovalPolicy<T extends { ApprovalPolicy: object }> = Selectable<T["ApprovalPolicy"]>;
export type ApprovalPolicyCreate<T extends { ApprovalPolicy: object }> = Insertable<
  T["ApprovalPolicy"]
>;
export type ApprovalPolicyUpdate<T extends { ApprovalPolicy: object }> = Updateable<
  T["ApprovalPolicy"]
>;

export type ApprovalPolicyStep<T extends { ApprovalPolicyStep: object }> = Selectable<
  T["ApprovalPolicyStep"]
>;
export type ApprovalPolicyStepCreate<T extends { ApprovalPolicyStep: object }> = Insertable<
  T["ApprovalPolicyStep"]
>;
export type ApprovalPolicyStepUpdate<T extends { ApprovalPolicyStep: object }> = Updateable<
  T["ApprovalPolicyStep"]
>;

export type ApprovalPolicyStepAssignee<T extends { ApprovalPolicyStepAssignee: object }> =
  Selectable<T["ApprovalPolicyStepAssignee"]>;
export type ApprovalPolicyStepAssigneeCreate<T extends { ApprovalPolicyStepAssignee: object }> =
  Insertable<T["ApprovalPolicyStepAssignee"]>;
export type ApprovalPolicyStepAssigneeUpdate<T extends { ApprovalPolicyStepAssignee: object }> =
  Updateable<T["ApprovalPolicyStepAssignee"]>;

export type ApprovalRequest<T extends { ApprovalRequest: object }> = Selectable<
  T["ApprovalRequest"]
>;
export type ApprovalRequestCreate<T extends { ApprovalRequest: object }> = Insertable<
  T["ApprovalRequest"]
>;
export type ApprovalRequestUpdate<T extends { ApprovalRequest: object }> = Updateable<
  T["ApprovalRequest"]
>;

export type ApprovalStep<T extends { ApprovalStep: object }> = Selectable<T["ApprovalStep"]>;
export type ApprovalStepCreate<T extends { ApprovalStep: object }> = Insertable<T["ApprovalStep"]>;
export type ApprovalStepUpdate<T extends { ApprovalStep: object }> = Updateable<T["ApprovalStep"]>;

export type ApprovalStepAssignee<T extends { ApprovalStepAssignee: object }> = Selectable<
  T["ApprovalStepAssignee"]
>;
export type ApprovalStepAssigneeCreate<T extends { ApprovalStepAssignee: object }> = Insertable<
  T["ApprovalStepAssignee"]
>;
export type ApprovalStepAssigneeUpdate<T extends { ApprovalStepAssignee: object }> = Updateable<
  T["ApprovalStepAssignee"]
>;

export type ApprovalDecision<T extends { ApprovalDecision: object }> = Selectable<
  T["ApprovalDecision"]
>;
export type ApprovalDecisionCreate<T extends { ApprovalDecision: object }> = Insertable<
  T["ApprovalDecision"]
>;
export type ApprovalDecisionUpdate<T extends { ApprovalDecision: object }> = Updateable<
  T["ApprovalDecision"]
>;
