/*
 * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package net.micode.notes.data;

import android.net.Uri;

/**
 * 笔记数据模型核心类
 * 定义笔记、文件夹的数据结构、类型标识及URI访问规范
 * 包含系统文件夹ID、数据列定义和不同类型笔记的常量
 */
public class Notes {
    public static final String AUTHORITY = "micode_notes";  // 内容提供器权限标识
    public static final String TAG = "Notes";              // 日志标签

    // 数据类型常量
    public static final int TYPE_NOTE = 0;       // 普通笔记
    public static final int TYPE_FOLDER = 1;     // 文件夹
    public static final int TYPE_SYSTEM = 2;     // 系统对象

    /**
     * 系统文件夹ID定义
     * ID_ROOT_FOLDER为默认根文件夹
     * ID_TEMPARAY_FOLDER为无所属文件夹的临时笔记
     * ID_CALL_RECORD_FOLDER存储通话记录
     * ID_TRASH_FOLER为回收站文件夹
     */
    public static final int ID_ROOT_FOLDER = 0;
    public static final int ID_TEMPARAY_FOLDER = -1;
    public static final int ID_CALL_RECORD_FOLDER = -2;
    public static final int ID_TRASH_FOLER = -3;

    // 意图传递参数常量
    public static final String INTENT_EXTRA_ALERT_DATE = "net.micode.notes.alert_date";       // 提醒日期
    public static final String INTENT_EXTRA_BACKGROUND_ID = "net.micode.notes.background_color_id";  // 背景颜色ID
    public static final String INTENT_EXTRA_WIDGET_ID = "net.micode.notes.widget_id";       // 桌面小部件ID
    public static final String INTENT_EXTRA_WIDGET_TYPE = "net.micode.notes.widget_type";   // 小部件类型
    public static final String INTENT_EXTRA_FOLDER_ID = "net.micode.notes.folder_id";       // 文件夹ID
    public static final String INTENT_EXTRA_CALL_DATE = "net.micode.notes.call_date";       // 通话日期

    // 桌面小部件类型常量
    public static final int TYPE_WIDGET_INVALIDE = -1;  // 无效类型
    public static final int TYPE_WIDGET_2X = 0;         // 2x1小部件
    public static final int TYPE_WIDGET_4X = 1;         // 4x1小部件

    public static class DataConstants {
        public static final String NOTE = TextNote.CONTENT_ITEM_TYPE;        // 文本笔记MIME类型
        public static final String CALL_NOTE = CallNote.CONTENT_ITEM_TYPE;  // 通话笔记MIME类型
    }

    /**
     * 笔记内容URI（查询所有笔记和文件夹）
     */
    public static final Uri CONTENT_NOTE_URI = Uri.parse("content://" + AUTHORITY + "/note");

    /**
     * 附件数据URI（查询笔记附件）
     */
    public static final Uri CONTENT_DATA_URI = Uri.parse("content://" + AUTHORITY + "/data");

    /**
     * 笔记基本信息列定义
     * 包含ID、父子关系、时间戳、内容摘要等字段
     */
    public interface NoteColumns {
        /** 行唯一标识 */
        public static final String ID = "_id";
        /** 父节点ID */
        public static final String PARENT_ID = "parent_id";
        /** 创建时间戳 */
        public static final String CREATED_DATE = "created_date";
        /** 最后修改时间戳 */
        public static final String MODIFIED_DATE = "modified_date";
        /** 提醒时间戳 */
        public static final String ALERTED_DATE = "alert_date";
        /** 文件夹名称或笔记内容摘要 */
        public static final String SNIPPET = "snippet";
        /** 桌面小部件ID */
        public static final String WIDGET_ID = "widget_id";
        /** 桌面小部件类型 */
        public static final String WIDGET_TYPE = "widget_type";
        /** 背景颜色资源ID */
        public static final String BG_COLOR_ID = "bg_color_id";
        /** 是否包含附件 */
        public static final String HAS_ATTACHMENT = "has_attachment";
        /** 文件夹内笔记数量 */
        public static final String NOTES_COUNT = "notes_count";
        /** 数据类型（笔记/文件夹/系统） */
        public static final String TYPE = "type";
        /** 最后同步ID（用于同步标记） */
        public static final String SYNC_ID = "sync_id";
        /** 本地修改标记 */
        public static final String LOCAL_MODIFIED = "local_modified";
        /** 移动前原始父ID（临时文件夹专用） */
        public static final String ORIGIN_PARENT_ID = "origin_parent_id";
        /** Google Tasks同步ID */
        public static final String GTASK_ID = "gtask_id";
        /** 数据版本号 */
        public static final String VERSION = "version";
    }

    /**
     * 附件数据列定义
     * 包含MIME类型、所属笔记ID、通用数据字段
     */
    public interface DataColumns {
        /** 行唯一标识 */
        public static final String ID = "_id";
        /** MIME类型（标识附件类型） */
        public static final String MIME_TYPE = "mime_type";
        /** 所属笔记ID */
        public static final String NOTE_ID = "note_id";
        /** 创建时间戳 */
        public static final String CREATED_DATE = "created_date";
        /** 最后修改时间戳 */
        public static final String MODIFIED_DATE = "modified_date";
        /** 附件内容 */
        public static final String CONTENT = "content";
        /** 通用数据字段1（整型） */
        public static final String DATA1 = "data1";
        /** 通用数据字段2（整型） */
        public static final String DATA2 = "data2";
        /** 通用数据字段3（文本） */
        public static final String DATA3 = "data3";
        /** 通用数据字段4（文本） */
        public static final String DATA4 = "data4";
        /** 通用数据字段5（文本） */
        public static final String DATA5 = "data5";
    }

    /**
     * 文本笔记定义
     * 继承DataColumns，增加清单模式标识
     */
    public static final class TextNote implements DataColumns {
        /** 清单模式标识（1为清单模式，0为普通模式） */
        public static final String MODE = DATA1;
        public static final int MODE_CHECK_LIST = 1;        // 清单模式常量

        /** 文本笔记MIME类型定义 */
        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/text_note";
        public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/text_note";
        public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/text_note");
    }

    /**
     * 通话笔记定义
     * 继承DataColumns，增加通话日期和电话号码字段
     */
    public static final class CallNote implements DataColumns {
        /** 通话时间戳 */
        public static final String CALL_DATE = DATA1;
        /** 电话号码 */
        public static final String PHONE_NUMBER = DATA3;

        /** 通话笔记MIME类型定义 */
        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/call_note";
        public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/call_note";
        public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/call_note");
    }
}