import { OpenAPIHono } from '@hono/zod-openapi';
import { createCrudRoutes } from '@d8d/shared-crud';
import { DeliveryAddressMt } from '../entities';
import {
  UserDeliveryAddressSchema,
  CreateUserDeliveryAddressDto,
  UpdateUserDeliveryAddressDto
} from '../schemas/user-delivery-address.mt.schema';
import userCustomRoutes from './user-custom.routes.mt';
import { authMiddleware } from '@d8d/auth-module-mt';

// 创建通用CRUD路由配置（只读模式）
const userCrudRoutes = createCrudRoutes({
  entity: DeliveryAddressMt,
  createSchema: CreateUserDeliveryAddressDto,
  updateSchema: UpdateUserDeliveryAddressDto,
  getSchema: UserDeliveryAddressSchema,
  listSchema: UserDeliveryAddressSchema,
  searchFields: ['name', 'phone', 'address'],
  relations: ['user', 'province', 'city', 'district', 'town'],
  middleware: [authMiddleware],
  userTracking: {
    createdByField: 'createdBy',
    updatedByField: 'updatedBy'
  },
  tenantOptions: {
    enabled: true,
    tenantIdField: 'tenantId'
  },
  readOnly: true, // 创建/更新/删除使用自定义路由
  // 配置数据权限控制，确保用户只能操作自己的数据
  dataPermission: {
    enabled: true,
    userIdField: 'userId',
    // 自动注入当前登录用户ID到查询条件
    // 用户只能访问和操作自己创建的配送地址
  }
});

// 创建混合路由应用
const app = new OpenAPIHono()
  .route('/', userCustomRoutes)      // 用户自定义业务路由（创建/更新/删除，包含地区验证）
  .route('/', userCrudRoutes);  // 通用CRUD路由（列表查询和获取详情）

export default app;