# Generated by Django 4.2.16 on 2025-10-15 09:12

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
        ("contenttypes", "0002_remove_content_type_name"),
    ]

    operations = [
        migrations.CreateModel(
            name="SystemMessage",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("title", models.CharField(max_length=200, verbose_name="Judul")),
                ("message", models.TextField(verbose_name="Pesan")),
                (
                    "message_type",
                    models.CharField(
                        choices=[
                            ("announcement", "Pengumuman"),
                            ("maintenance", "Maintenance"),
                            ("update", "Update Sistem"),
                            ("warning", "Peringatan"),
                            ("info", "Informasi"),
                        ],
                        max_length=30,
                        verbose_name="Tipe Pesan",
                    ),
                ),
                (
                    "display_location",
                    models.CharField(
                        choices=[
                            ("dashboard", "Dashboard"),
                            ("all_pages", "Semua Halaman"),
                            ("login", "Halaman Login"),
                        ],
                        default="dashboard",
                        max_length=30,
                        verbose_name="Lokasi Tampil",
                    ),
                ),
                (
                    "is_dismissible",
                    models.BooleanField(default=True, verbose_name="Bisa Ditutup"),
                ),
                ("start_date", models.DateTimeField(verbose_name="Mulai Tampil")),
                (
                    "end_date",
                    models.DateTimeField(
                        blank=True, null=True, verbose_name="Selesai Tampil"
                    ),
                ),
                ("is_active", models.BooleanField(default=True, verbose_name="Aktif")),
                (
                    "priority",
                    models.PositiveIntegerField(
                        default=0,
                        help_text="Semakin tinggi, semakin atas ditampilkan",
                        verbose_name="Prioritas",
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="Dibuat"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="Diupdate"),
                ),
                (
                    "created_by",
                    models.ForeignKey(
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="Dibuat Oleh",
                    ),
                ),
            ],
            options={
                "verbose_name": "Pesan Sistem",
                "verbose_name_plural": "Pesan Sistem",
                "ordering": ["-priority", "-start_date"],
            },
        ),
        migrations.CreateModel(
            name="AdminPreference",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "theme",
                    models.CharField(
                        choices=[
                            ("light", "Light"),
                            ("dark", "Dark"),
                            ("auto", "Auto"),
                        ],
                        default="light",
                        max_length=20,
                        verbose_name="Tema",
                    ),
                ),
                (
                    "sidebar_state",
                    models.CharField(
                        choices=[
                            ("expanded", "Expanded"),
                            ("collapsed", "Collapsed"),
                            ("auto", "Auto"),
                        ],
                        default="expanded",
                        max_length=20,
                        verbose_name="Sidebar",
                    ),
                ),
                (
                    "items_per_page",
                    models.PositiveIntegerField(
                        default=25, verbose_name="Item Per Halaman"
                    ),
                ),
                (
                    "default_dashboard",
                    models.CharField(
                        default="main", max_length=100, verbose_name="Dashboard Default"
                    ),
                ),
                (
                    "show_welcome_message",
                    models.BooleanField(
                        default=True, verbose_name="Tampilkan Pesan Selamat Datang"
                    ),
                ),
                (
                    "email_notifications",
                    models.BooleanField(default=True, verbose_name="Notifikasi Email"),
                ),
                (
                    "browser_notifications",
                    models.BooleanField(
                        default=True, verbose_name="Notifikasi Browser"
                    ),
                ),
                (
                    "sound_notifications",
                    models.BooleanField(default=False, verbose_name="Notifikasi Suara"),
                ),
                (
                    "custom_settings",
                    models.JSONField(
                        blank=True, default=dict, verbose_name="Pengaturan Custom"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="Dibuat"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="Diupdate"),
                ),
                (
                    "user",
                    models.OneToOneField(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="admin_preference",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="User",
                    ),
                ),
            ],
            options={
                "verbose_name": "Preferensi Admin",
                "verbose_name_plural": "Preferensi Admin",
            },
        ),
        migrations.CreateModel(
            name="QuickAccess",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("title", models.CharField(max_length=100, verbose_name="Judul")),
                ("url", models.CharField(max_length=500, verbose_name="URL")),
                (
                    "icon",
                    models.CharField(
                        choices=[
                            ("fa-dashboard", "Dashboard"),
                            ("fa-users", "Users"),
                            ("fa-file", "Documents"),
                            ("fa-newspaper", "News"),
                            ("fa-briefcase", "Business"),
                            ("fa-heartbeat", "Posyandu"),
                            ("fa-mountain", "Tourism"),
                            ("fa-comments", "Complaints"),
                            ("fa-chart-bar", "Reports"),
                            ("fa-cog", "Settings"),
                        ],
                        default="fa-star",
                        max_length=50,
                        verbose_name="Icon",
                    ),
                ),
                (
                    "color",
                    models.CharField(
                        default="primary",
                        help_text="primary, success, warning, danger, info",
                        max_length=50,
                        verbose_name="Warna",
                    ),
                ),
                (
                    "position",
                    models.PositiveIntegerField(default=0, verbose_name="Urutan"),
                ),
                ("is_active", models.BooleanField(default=True, verbose_name="Aktif")),
                (
                    "access_count",
                    models.PositiveIntegerField(default=0, verbose_name="Jumlah Akses"),
                ),
                (
                    "last_accessed",
                    models.DateTimeField(
                        blank=True, null=True, verbose_name="Terakhir Diakses"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="Dibuat"),
                ),
                (
                    "user",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="quick_access",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="User",
                    ),
                ),
            ],
            options={
                "verbose_name": "Akses Cepat",
                "verbose_name_plural": "Akses Cepat",
                "ordering": ["position", "title"],
                "unique_together": {("user", "url")},
            },
        ),
        migrations.CreateModel(
            name="DataExportHistory",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "module",
                    models.CharField(
                        choices=[
                            ("references", "Data Referensi"),
                            ("beneficiaries", "Penerima Bantuan"),
                            ("business", "Usaha"),
                            ("complaints", "Keluhan"),
                            ("documents", "Dokumen"),
                            ("tourism", "Wisata"),
                            ("posyandu", "Posyandu"),
                            ("news", "Berita"),
                            ("organization", "Organisasi"),
                        ],
                        max_length=50,
                        verbose_name="Modul",
                    ),
                ),
                (
                    "export_format",
                    models.CharField(
                        choices=[
                            ("excel", "Excel"),
                            ("csv", "CSV"),
                            ("pdf", "PDF"),
                            ("json", "JSON"),
                        ],
                        max_length=20,
                        verbose_name="Format",
                    ),
                ),
                (
                    "file_name",
                    models.CharField(max_length=255, verbose_name="Nama File"),
                ),
                (
                    "file_size",
                    models.PositiveIntegerField(
                        default=0, verbose_name="Ukuran File (bytes)"
                    ),
                ),
                (
                    "record_count",
                    models.PositiveIntegerField(default=0, verbose_name="Jumlah Data"),
                ),
                (
                    "filters",
                    models.JSONField(
                        blank=True, null=True, verbose_name="Filter yang Digunakan"
                    ),
                ),
                (
                    "is_successful",
                    models.BooleanField(default=True, verbose_name="Berhasil"),
                ),
                (
                    "error_message",
                    models.TextField(blank=True, null=True, verbose_name="Pesan Error"),
                ),
                (
                    "ip_address",
                    models.GenericIPAddressField(
                        blank=True, null=True, verbose_name="IP Address"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, verbose_name="Waktu Export"
                    ),
                ),
                (
                    "user",
                    models.ForeignKey(
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="User",
                    ),
                ),
            ],
            options={
                "verbose_name": "History Export Data",
                "verbose_name_plural": "History Export Data",
                "ordering": ["-created_at"],
                "indexes": [
                    models.Index(
                        fields=["user", "-created_at"],
                        name="admin_panel_user_id_ea7dea_idx",
                    ),
                    models.Index(
                        fields=["module", "-created_at"],
                        name="admin_panel_module_51b558_idx",
                    ),
                ],
            },
        ),
        migrations.CreateModel(
            name="DashboardWidget",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "title",
                    models.CharField(max_length=100, verbose_name="Judul Widget"),
                ),
                (
                    "widget_type",
                    models.CharField(
                        choices=[
                            ("stats", "Statistik"),
                            ("chart", "Grafik"),
                            ("table", "Tabel Data"),
                            ("list", "Daftar"),
                            ("calendar", "Kalender"),
                            ("quick_actions", "Aksi Cepat"),
                            ("recent_activity", "Aktivitas Terbaru"),
                            ("alerts", "Peringatan"),
                        ],
                        max_length=30,
                        verbose_name="Tipe Widget",
                    ),
                ),
                (
                    "size",
                    models.CharField(
                        choices=[
                            ("small", "Kecil (1/4)"),
                            ("medium", "Sedang (1/2)"),
                            ("large", "Besar (3/4)"),
                            ("full", "Penuh (1/1)"),
                        ],
                        default="medium",
                        max_length=20,
                        verbose_name="Ukuran",
                    ),
                ),
                (
                    "config",
                    models.JSONField(
                        blank=True,
                        default=dict,
                        help_text="Konfigurasi widget dalam format JSON",
                        verbose_name="Konfigurasi",
                    ),
                ),
                (
                    "position",
                    models.PositiveIntegerField(
                        default=0,
                        help_text="Urutan tampil widget",
                        verbose_name="Posisi",
                    ),
                ),
                (
                    "is_visible",
                    models.BooleanField(default=True, verbose_name="Tampilkan"),
                ),
                (
                    "is_collapsible",
                    models.BooleanField(default=True, verbose_name="Bisa Dilipat"),
                ),
                (
                    "is_collapsed",
                    models.BooleanField(default=False, verbose_name="Dilipat Default"),
                ),
                (
                    "auto_refresh",
                    models.BooleanField(default=False, verbose_name="Auto Refresh"),
                ),
                (
                    "refresh_interval",
                    models.PositiveIntegerField(
                        default=300, verbose_name="Interval Refresh (detik)"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="Dibuat"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="Diupdate"),
                ),
                (
                    "user",
                    models.ForeignKey(
                        blank=True,
                        help_text="Kosongkan untuk widget default semua user",
                        null=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="dashboard_widgets",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="User",
                    ),
                ),
            ],
            options={
                "verbose_name": "Widget Dashboard",
                "verbose_name_plural": "Widget Dashboard",
                "ordering": ["position", "title"],
                "unique_together": {("user", "title")},
            },
        ),
        migrations.CreateModel(
            name="AdminNotification",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("title", models.CharField(max_length=200, verbose_name="Judul")),
                ("message", models.TextField(verbose_name="Pesan")),
                (
                    "type",
                    models.CharField(
                        choices=[
                            ("info", "Informasi"),
                            ("warning", "Peringatan"),
                            ("success", "Sukses"),
                            ("danger", "Bahaya"),
                            ("reminder", "Pengingat"),
                        ],
                        default="info",
                        max_length=20,
                        verbose_name="Tipe",
                    ),
                ),
                (
                    "priority",
                    models.CharField(
                        choices=[
                            ("low", "Rendah"),
                            ("medium", "Sedang"),
                            ("high", "Tinggi"),
                            ("urgent", "Mendesak"),
                        ],
                        default="medium",
                        max_length=20,
                        verbose_name="Prioritas",
                    ),
                ),
                (
                    "action_url",
                    models.CharField(
                        blank=True, max_length=500, null=True, verbose_name="Link Aksi"
                    ),
                ),
                (
                    "action_text",
                    models.CharField(
                        blank=True,
                        max_length=100,
                        null=True,
                        verbose_name="Text Tombol",
                    ),
                ),
                (
                    "is_read",
                    models.BooleanField(default=False, verbose_name="Sudah Dibaca"),
                ),
                (
                    "is_archived",
                    models.BooleanField(default=False, verbose_name="Diarsipkan"),
                ),
                (
                    "read_at",
                    models.DateTimeField(
                        blank=True, null=True, verbose_name="Dibaca Pada"
                    ),
                ),
                (
                    "expires_at",
                    models.DateTimeField(
                        blank=True,
                        help_text="Notifikasi akan otomatis hilang setelah tanggal ini",
                        null=True,
                        verbose_name="Kadaluarsa",
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="Dibuat"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="Diupdate"),
                ),
                (
                    "recipient",
                    models.ForeignKey(
                        blank=True,
                        help_text="Kosongkan untuk broadcast ke semua admin",
                        null=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="admin_notifications",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="Penerima",
                    ),
                ),
            ],
            options={
                "verbose_name": "Notifikasi Admin",
                "verbose_name_plural": "Notifikasi Admin",
                "ordering": ["-created_at"],
                "indexes": [
                    models.Index(
                        fields=["recipient", "is_read", "-created_at"],
                        name="admin_panel_recipie_46b0ca_idx",
                    ),
                    models.Index(
                        fields=["priority", "-created_at"],
                        name="admin_panel_priorit_0b0139_idx",
                    ),
                ],
            },
        ),
        migrations.CreateModel(
            name="AdminActivityLog",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "action",
                    models.CharField(
                        choices=[
                            ("create", "Tambah Data"),
                            ("update", "Ubah Data"),
                            ("delete", "Hapus Data"),
                            ("view", "Lihat Data"),
                            ("export", "Export Data"),
                            ("import", "Import Data"),
                            ("login", "Login"),
                            ("logout", "Logout"),
                            ("approve", "Approve"),
                            ("reject", "Reject"),
                            ("publish", "Publish"),
                            ("unpublish", "Unpublish"),
                            ("other", "Lainnya"),
                        ],
                        max_length=20,
                        verbose_name="Aksi",
                    ),
                ),
                (
                    "module",
                    models.CharField(
                        choices=[
                            ("dashboard", "Dashboard"),
                            ("references", "Data Referensi"),
                            ("beneficiaries", "Penerima Bantuan"),
                            ("business", "Usaha"),
                            ("complaints", "Keluhan"),
                            ("documents", "Dokumen"),
                            ("tourism", "Wisata"),
                            ("posyandu", "Posyandu"),
                            ("news", "Berita"),
                            ("village_profile", "Profil Desa"),
                            ("organization", "Organisasi"),
                            ("layanan", "Layanan"),
                            ("settings", "Pengaturan"),
                            ("users", "Pengguna"),
                            ("system", "Sistem"),
                        ],
                        max_length=50,
                        verbose_name="Modul",
                    ),
                ),
                ("description", models.TextField(verbose_name="Deskripsi")),
                ("object_id", models.PositiveIntegerField(blank=True, null=True)),
                (
                    "object_repr",
                    models.CharField(
                        blank=True,
                        max_length=255,
                        null=True,
                        verbose_name="Representasi Objek",
                    ),
                ),
                (
                    "ip_address",
                    models.GenericIPAddressField(
                        blank=True, null=True, verbose_name="IP Address"
                    ),
                ),
                (
                    "user_agent",
                    models.TextField(blank=True, null=True, verbose_name="User Agent"),
                ),
                (
                    "old_value",
                    models.JSONField(blank=True, null=True, verbose_name="Data Lama"),
                ),
                (
                    "new_value",
                    models.JSONField(blank=True, null=True, verbose_name="Data Baru"),
                ),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="Waktu"),
                ),
                (
                    "content_type",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        to="contenttypes.contenttype",
                    ),
                ),
                (
                    "user",
                    models.ForeignKey(
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="User",
                    ),
                ),
            ],
            options={
                "verbose_name": "Log Aktivitas Admin",
                "verbose_name_plural": "Log Aktivitas Admin",
                "ordering": ["-created_at"],
                "indexes": [
                    models.Index(
                        fields=["user", "-created_at"],
                        name="admin_panel_user_id_8f5816_idx",
                    ),
                    models.Index(
                        fields=["module", "-created_at"],
                        name="admin_panel_module_5dea9e_idx",
                    ),
                    models.Index(
                        fields=["action", "-created_at"],
                        name="admin_panel_action_8766a3_idx",
                    ),
                ],
            },
        ),
    ]
