<?php

declare(strict_types=1);

namespace App\Enums;

use BenSampo\Enum\Enum;

final class NotificationType extends Enum
{
  const Info = 'info';
  const ApprovalRequest = 'approval_request';
  const Reminder = 'reminder';
  const Monitoring = 'monitoring';

  public static function contents(): array
  {
    return [
      self::Info => self::getInfo(),
      self::ApprovalRequest => self::getApprovalRequest(),
      self::Reminder => self::getReminder(),
      self::Monitoring => self::getMonitoring(),
    ];
  }

  public static function getContent($key, $role)
  {
    $contents = self::contents();
    return $contents[$key][$role];
  }

  public static function getInfo(): array
  {
    return [
      "user" => [
        'INFO_BUDGET_APPROVED' => [
          'title' => 'Info: Anggaran Disetujui Manajer',
          'message' => 'Anggaran {name} ({code}) telah disetujui oleh {manager_name} dan masih memerlukan persetujuan Direktur.'
        ],
        'BUDGET_APPROVED' => [
          'title' => 'Persetujuan Anggaran Selesai',
          'message' => 'Anggaran {name} ({code}) telah disetujui sepenuhnya dan siap untuk digunakan.'
        ],
        'BUDGET_REJECTED' => [
          'title' => 'Anggaran Memerlukan Revisi',
          'message' => 'Anggaran {name} ({code}) belum disetujui. Mohon tinjau catatan revisi untuk perbaikan.'
        ],
        'BUDGET_PAID' => [
          'title' => 'Pembayaran Berhasil Dikirim',
          'message' => 'Dana untuk anggaran {name} ({code}) telah berhasil diproses dan dikirim.'
        ],
      ],
      "manager" => [
        'BUDGET_CREATED' => [
          'title' => 'Pengajuan Anggaran Baru',
          'message' => '{user_name} telah mengajukan anggaran {name} ({code}). Mohon lakukan peninjauan.'
        ],
        'BUDGET_APPROVED' => [
          'title' => 'Info: Anggaran Disetujui Direktur',
          'message' => 'Anggaran {name} ({code}) yang Anda tinjau telah mendapatkan persetujuan akhir dari Direktur.'
        ],
      ],
      "director" => [
        'REPORT_READY' => [
          'title' => 'Laporan Anggaran Tersedia',
          'message' => 'Laporan anggaran komprehensif untuk periode {period} sudah siap dianalisis.'
        ],
        'INFO_BUDGET_APPROVED' => [
          'title' => 'Info: Anggaran Disetujui',
          'message' => 'Anggaran {name} ({code}) telah disetujui oleh {manager_name} dan tidak memerlukan persetujuan lanjutan.'
        ],
      ],
      "president_director" => [
        'SUMMARY_READY' => [
          'title' => 'Ringkasan Eksekutif Tersedia',
          'message' => 'Laporan ringkasan realisasi anggaran terbaru telah siap untuk ditinjau oleh manajemen.'
        ],
      ],
    ];
  }

  public static function getApprovalRequest(): array
  {
    return [
      "user" => [
        'REVISION_REQUESTED' => [
          'title' => 'Revisi Anggaran Diperlukan',
          'message' => 'Anggaran {name} ({code}) memerlukan perbaikan. Mohon periksa catatan revisi.'
        ],
      ],
      "manager" => [
        'SUBMISSION_RECEIVED' => [
          'title' => 'Persetujuan Anggaran Baru',
          'message' => '{user_name} mengajukan anggaran {name} ({code}) sebesar {amount}. Mohon tinjau pengajuan ini.'
        ],
        'PURCHASE_ORDER_REQUEST' => [
          'title' => 'Pengajuan Purchase Order',
          'message' => '{user_name} mengajukan Purchase Order untuk anggaran {name} ({code}) sebesar {amount}. Mohon tinjau pengajuan ini.'
        ],
      ],
      "director" => [
        'FORWARDED_FOR_APPROVAL' => [
          'title' => 'Butuh Persetujuan Akhir',
          'message' => 'Anggaran {name} ({code}) telah divalidasi {manager_name} dan menunggu persetujuan akhir Anda.'
        ],
      ],
      "president_director" => [
        'HIGH_VALUE_APPROVAL' => [
          'title' => 'Persetujuan Prioritas (Nilai Tinggi)',
          'message' => 'Anggaran bernilai besar {name} ({code}) memerlukan peninjauan dan persetujuan Anda.'
        ],
      ],
    ];
  }

  public static function getReminder(): array
  {
    return [
      "user" => [
        'DRAFT_PENDING' => [
          'title' => 'Lanjutkan Draft Anggaran',
          'message' => 'Anggaran {name} ({code}) masih dalam status draft. Jangan lupa untuk segera mengajukannya.'
        ],
      ],
      "manager" => [
        'APPROVAL_PENDING' => [
          'title' => 'Pengingat Persetujuan',
          'message' => 'Anggaran {name} ({code}) menunggu tindak lanjut Anda (+2 hari). Segera tinjau untuk menghindari keterlambatan.'
        ],
      ],
      "director" => [
        'REVIEW_PENDING' => [
          'title' => 'Antrean Tinjauan Anggaran',
          'message' => 'Terdapat pengajuan anggaran {name} ({code}) yang memerlukan persetujuan akhir Anda.'
        ],
      ],
      "president_director" => [
        'URGENT_APPROVAL' => [
          'title' => 'Otorisasi Mendesak',
          'message' => 'Anggaran {name} ({code}) memerlukan perhatian Anda segera untuk kelanjutan proses.'
        ],
      ],
    ];
  }

  public static function getMonitoring(): array
  {
    return [
      "user" => [
        'LIMIT_WARNING' => [
          'title' => 'Ambang Batas Anggaran',
          'message' => 'Perhatian: Penggunaan anggaran {name} telah mencapai {percentage}%. Mohon kendalikan sisa alokasi dana.'
        ],
      ],
      "manager" => [
        'DEPARTMENT_OVERBUDGET' => [
          'title' => 'Melampaui Anggaran Departemen',
          'message' => 'Departemen {department} telah melebihi pagu anggaran ({percentage}%). Diperlukan evaluasi segera.'
        ],
      ],
      "director" => [
        'SIGNIFICANT_DEVIATION' => [
          'title' => 'Anomali Anggaran Terdeteksi',
          'message' => 'Terjadi deviasi signifikan pada kategori {category}. Data menunjukkan penggunaan yang tidak sesuai proyeksi awal.'
        ],
      ],
      "president_director" => [
        'CRITICAL_ALERT' => [
          'title' => 'Peringatan Kapasitas Keuangan',
          'message' => 'Peringatan Kritikal: Realisasi anggaran total perusahaan telah mencapai ambang batas tahunan.'
        ],
      ],
    ];
  }
}
