import { CollectionConfig, Field } from 'payload'

// Consent Log Collection - เก็บ log การยินยอมของ users
export const ConsentLog: CollectionConfig = {
  slug: 'consent-logs',
  admin: {
    useAsTitle: 'sessionId',
    defaultColumns: ['sessionId', 'consentType', 'granted', 'createdAt'],
    description: 'บันทึกการยินยอมของผู้ใช้ตาม PDPA',
  },
  access: {
    // ทุกคนสามารถสร้าง log ได้ (public)
    create: () => true,
    // แต่ดูได้เฉพาะ admin
    read: ({ req: { user } }) => {
      if (!user) return false
      return user.role === 'admin'
    },
    // แก้ไขได้เฉพาะ admin
    update: ({ req: { user } }) => {
      if (!user) return false
      return user.role === 'admin'
    },
    // ลบได้เฉพาะ admin
    delete: ({ req: { user } }) => {
      if (!user) return false
      return user.role === 'admin'
    },
  },
  fields: [
    {
      name: 'sessionId',
      type: 'text',
      required: true,
      admin: {
        description: 'Session ID ของผู้ใช้',
      },
    },
    {
      name: 'consentType',
      type: 'select',
      required: true,
      options: [
        { label: 'Essential', value: 'essential' },
        { label: 'Analytics', value: 'analytics' },
        { label: 'Marketing', value: 'marketing' },
        { label: 'Functional', value: 'functional' },
        { label: 'All Accepted', value: 'accept_all' },
        { label: 'All Rejected', value: 'reject_all' },
      ],
    },
    {
      name: 'granted',
      type: 'checkbox',
      required: true,
      defaultValue: false,
      admin: {
        description: 'ยินยอมหรือไม่',
      },
    },
    {
      name: 'ipAddress',
      type: 'text',
      admin: {
        description: 'IP Address ของผู้ใช้',
        readOnly: true,
      },
    },
    {
      name: 'userAgent',
      type: 'text',
      admin: {
        description: 'Browser User Agent',
        readOnly: true,
      },
    },
    {
      name: 'metadata',
      type: 'json',
      admin: {
        description: 'ข้อมูลเพิ่มเติม',
      },
    },
    {
      name: 'createdAt',
      type: 'date',
      required: true,
      admin: {
        description: 'วันที่และเวลาที่ยินยอม',
        readOnly: true,
      },
    },
  ],
  hooks: {
    beforeChange: [
      ({ data }) => {
        // เพิ่ม timestamp อัตโนมัติ
        if (!data.createdAt) {
          data.createdAt = new Date().toISOString()
        }
        return data
      },
    ],
  },
}

// Consent Settings Collection - เก็บ settings ของ consent banner
export const ConsentSettings: CollectionConfig = {
  slug: 'consent-settings',
  admin: {
    useAsTitle: 'title',
    description: 'ตั้งค่า Cookie Consent Banner',
  },
  access: {
    read: () => true, // Public read
    create: ({ req: { user } }) => !!user && user.role === 'admin',
    update: ({ req: { user } }) => !!user && user.role === 'admin',
    delete: ({ req: { user } }) => !!user && user.role === 'admin',
  },
  fields: [
    {
      name: 'title',
      type: 'text',
      required: true,
      defaultValue: 'นโยบายคุกกี้',
    },
    {
      name: 'description',
      type: 'textarea',
      required: true,
      defaultValue: 'เราใช้คุกกี้เพื่อปรับปรุงประสบการณ์การใช้งานเว็บไซต์ของคุณ คุณสามารถเลือกได้ว่าจะอนุญาตคุกกี้ประเภทใด',
    },
    {
      name: 'position',
      type: 'select',
      defaultValue: 'bottom',
      options: [
        { label: 'ด้านล่าง (Bottom)', value: 'bottom' },
        { label: 'ด้านบน (Top)', value: 'top' },
      ],
    },
    {
      name: 'theme',
      type: 'select',
      defaultValue: 'light',
      options: [
        { label: 'Light Mode', value: 'light' },
        { label: 'Dark Mode', value: 'dark' },
      ],
    },
    {
      name: 'essentialCookies',
      type: 'json',
      admin: {
        description: 'รายชื่อ essential cookies ที่จำเป็นต้องมี',
      },
    },
    {
      name: 'analyticsCookies',
      type: 'json',
      admin: {
        description: 'รายชื่อ analytics cookies',
      },
    },
    {
      name: 'marketingCookies',
      type: 'json',
      admin: {
        description: 'รายชื่อ marketing cookies',
      },
    },
    {
      name: 'functionalCookies',
      type: 'json',
      admin: {
        description: 'รายชื่อ functional cookies',
      },
    },
    {
      name: 'isActive',
      type: 'checkbox',
      defaultValue: true,
      admin: {
        description: 'แสดง consent banner หรือไม่',
      },
    },
  ],
}
