import { DataSource, ViewColumn, ViewEntity } from "typeorm";
import { memberExecutivePositions } from "../entity/club/member/memberExecutivePositions";
import { Salutation } from "../enums/salutation";

@ViewEntity({
  expression: (datasource: DataSource) =>
    datasource
      .getRepository(memberExecutivePositions)
      .createQueryBuilder("memberExecutivePositions")
      .select("executivePosition.id", "positionId")
      .addSelect("executivePosition.position", "position")
      .addSelect("member.id", "memberId")
      .addSelect("member.salutation", "memberSalutation")
      .addSelect("member.firstname", "memberFirstname")
      .addSelect("member.lastname", "memberLastname")
      .addSelect("member.nameaffix", "memberNameaffix")
      .addSelect("member.birthdate", "memberBirthdate")
      .addSelect(
        "SUM(TIMESTAMPDIFF(DAY, memberExecutivePositions.start, COALESCE(memberExecutivePositions.end, CURRENT_DATE)))",
        "durationInDays"
      )
      .leftJoin("memberExecutivePositions.executivePosition", "executivePosition")
      .leftJoin("memberExecutivePositions.member", "member")
      .groupBy("executivePosition.id"),
})
export class memberExecutivePositionsView {
  @ViewColumn()
  durationInDays: number;

  @ViewColumn()
  position: string;

  @ViewColumn()
  positionId: number;

  @ViewColumn()
  memberId: number;

  @ViewColumn()
  memberSalutation: Salutation;

  @ViewColumn()
  memberFirstname: string;

  @ViewColumn()
  memberLastname: string;

  @ViewColumn()
  memberNameaffix: string;

  @ViewColumn()
  memberBirthdate: Date;
}