import {
  Column,
  CreateDateColumn,
  DeleteDateColumn,
  Entity,
  PrimaryGeneratedColumn,
  UpdateDateColumn,
} from 'typeorm';

@Entity('agencies')
export class Agency {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ unique: true })
  name: string;

  @Column({ nullable: true })
  legalName?: string;

  @Column()
  country: string;

  @Column()
  city: string;

  @Column({ nullable: true })
  address?: string;

  @Column({ nullable: true })
  postalCode?: string;

  @Column({ nullable: true })
  latitude?: string;

  @Column({ nullable: true })
  longitude?: string;

  @Column({ nullable: true })
  phone?: string;

  @Column({ nullable: true })
  secondaryPhone?: string;

  @Column({ nullable: true })
  whatsapp?: string;

  @Column({ nullable: true })
  email?: string;

  @Column({ nullable: true })
  supportEmail?: string;

  @Column({ nullable: true })
  website?: string;

  @Column({ nullable: true })
  logoUrl?: string;

  @Column({ nullable: true })
  taxNumber?: string;

  @Column({ nullable: true })
  vatNumber?: string;

  @Column({ nullable: true })
  commercialRegister?: string;

  @Column({ nullable: true })
  licenseNumber?: string;

  @Column({ nullable: true })
  bankName?: string;

  @Column({ nullable: true })
  bankAccount?: string;

  @Column({ nullable: true })
  iban?: string;

  @Column({ nullable: true })
  swift?: string;

  /*
  |--------------------------------------------------------------------------
  | TVA / FACTURATION
  |--------------------------------------------------------------------------
  */

  @Column({
    type: 'decimal',
    precision: 5,
    scale: 2,
    default: 19,
  })
  defaultVatRate: number;

  @Column({
    default: true,
  })
  vatEnabled: boolean;

  @Column({
    default: 'exclusive',
  })
  vatMode: string;

  @Column({
    nullable: true,
  })
  invoicePrefix?: string;

  @Column({
    nullable: true,
  })
  quotePrefix?: string;

  @Column({
    nullable: true,
  })
  creditNotePrefix?: string;

  @Column({
    default: 1,
  })
  nextInvoiceNumber: number;

  @Column({
    default: 1,
  })
  nextQuoteNumber: number;

  @Column({
    default: 1,
  })
  nextCreditNoteNumber: number;

  @Column({
    default: true,
  })
  separateVatDisplay: boolean;

  @Column({
    default: true,
  })
  showVatNumberOnInvoices: boolean;

  @Column({
    default: true,
  })
  allowTaxExemption: boolean;

  @Column({
    nullable: true,
  })
  accountingEmail?: string;

  @Column({
    nullable: true,
  })
  billingAddress?: string;

  /*
  |--------------------------------------------------------------------------
  | UI
  |--------------------------------------------------------------------------
  */

  @Column({ default: '#111827' })
  themeColor: string;

  @Column({ default: '#ffffff' })
  secondaryColor: string;

  @Column({ default: true })
  isActive: boolean;

  @Column({ default: 'TND' })
  defaultCurrency: string;

  @Column({ default: 'fr' })
  defaultLanguage: string;

  @Column({ nullable: true })
  timezone?: string;

  @Column({ nullable: true })
  workingHours?: string;

  @Column('simple-array', { nullable: true })
  pickupLocations?: string[];

  @Column('simple-array', { nullable: true })
  returnLocations?: string[];

  @Column('simple-array', { nullable: true })
  parks?: string[];

  /*
  |--------------------------------------------------------------------------
  | PAIEMENTS
  |--------------------------------------------------------------------------
  */

  @Column('json', { nullable: true })
  paymentSettings?: {
    allowCash?: boolean;
    allowCheque?: boolean;
    allowCard?: boolean;
    allowTpe?: boolean;
    allowKonnect?: boolean;
    allowFlouci?: boolean;
    allowGooglePay?: boolean;
    allowApplePay?: boolean;
    allowBankTransfer?: boolean;
    allowStripe?: boolean;
    allowPaypal?: boolean;
    defaultPaymentMethod?: string;
  };

  /*
  |--------------------------------------------------------------------------
  | NOTIFICATIONS
  |--------------------------------------------------------------------------
  */

  @Column('json', { nullable: true })
  notificationSettings?: {
    emailNotifications?: boolean;
    whatsappNotifications?: boolean;
    dashboardAlerts?: boolean;
    maintenanceReminderDays?: number;
    insuranceReminderDays?: number;
    vignetteReminderDays?: number;
    paymentReminderDays?: number;
  };

  /*
  |--------------------------------------------------------------------------
  | DOCUMENTS
  |--------------------------------------------------------------------------
  */

  @Column('json', { nullable: true })
  documentSettings?: {
    showLogo?: boolean;
    showTaxInfo?: boolean;
    showQrCode?: boolean;
    defaultPrintType?: string;
    defaultFooter?: string;
    contractTerms?: string;
    invoiceTerms?: string;
    receiptTerms?: string;
    signatureRequired?: boolean;
    qrEnabled?: boolean;
    ocrEnabled?: boolean;
    aiReviewEnabled?: boolean;
  };

  @Column({ nullable: true })
  notes?: string;

  @CreateDateColumn()
  createdAt: Date;

  @UpdateDateColumn()
  updatedAt: Date;

  @DeleteDateColumn()
  deletedAt?: Date;
}