import { Controller, Route, Security, Tags, SuccessResponse, Response, Get } from "tsoa";
import { AppDataSource } from "../database/data-source";
import HttpSuccess from "../interfaces/http-success";
import HttpStatus from "../interfaces/http-status";
import { BloodGroup } from "../entities/BloodGroup";
import { Gender } from "../entities/Gender";
import { Prefixe } from "../entities/Prefixe";
import { Relationship } from "../entities/Relationship";
import { Religion } from "../entities/Religion";
import { Rank } from "../entities/Rank";

@Route("api/v1/org/metadata")
@Tags("Profile")
@Security("bearerAuth")
@Response(
  HttpStatus.INTERNAL_SERVER_ERROR,
  "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง",
)
@SuccessResponse(HttpStatus.OK, "สำเร็จ")
export class MainController extends Controller {
  private bloodGroupRepo = AppDataSource.getRepository(BloodGroup);
  private genderRepo = AppDataSource.getRepository(Gender);
  private prefixeRepo = AppDataSource.getRepository(Prefixe);
  private relationshipRepo = AppDataSource.getRepository(Relationship);
  private religionRepo = AppDataSource.getRepository(Religion);
  private rankRepo = AppDataSource.getRepository(Rank);
  /**
   * API ข้อมูลหลัก
   *
   * @summary ORG_065 - ข้อมูลหลัก
   *
   */
  @Get("main/person")
  async getMainPerson() {
    const bloodGroups = await this.bloodGroupRepo.find();
    const genders = await this.genderRepo.find();
    const prefixs = await this.prefixeRepo.find();
    const relationships = await this.relationshipRepo.find();
    const religions = await this.religionRepo.find();
    const rank = await this.rankRepo.find();

    return new HttpSuccess({ bloodGroups, genders, prefixs, relationships, religions, rank });
  }
}
