i wanted to build my own automation tool in python for Windows that can automatically organize files based on rules. it can create rules to move, copy, delete, or rename files based on various criteria, such as file type, date, and size. i can organize these rules based on priority. i can select if a windows notification sent when a file is moved for each rule.

I want to use PyQt for the interface. Interface design for my file management tool:

Main Window:
- Menu bar with File menu (Pause (QAction with toggle), Import Settings, Export Settings) and Preferences menu
- List of existing rules (QListWidget), with options to edit or delete each rule (QPushButtons)
- Add Rule button (QPushButtons)

Add Rule Window:
- Rule name (QLineEdit)
- Select folders to apply the rule to (QPushButtons to open file dialog)
- Rule options section (QGroupBox with title "Options", expandable/collapsible)
 - Enable (QCheckBox)
 - Confirm before action (QCheckBox)
 - Recursive (QCheckBox)
 - Read-only attribute (QCheckBox)
 - Hidden attribute (QCheckBox)
 - System attribute (QCheckBox)
- Create rule (QPushButton)
- Act if (QComboBox with options "all" or "any")
- Rule conditions section (QGroupBox with title "Conditions", expandable/collapsible)
 - Dropdown to select file attribute (QComboBox with options Name, Extension, Size, Date last modified, Date last accessed, Date created)
 - Dropdown to select condition (QComboBox with options starts with, ends with, matches, does not match, in the last, is not in the last)
 - Integer field to specify number of seconds, minutes, hours, days, or weeks (QSpinBox)
 - Options section (QGroupBox with title "Options", expandable/collapsible)
 - Option to exclude files with Read-only, Hidden, or System attributes (can select for each attribute individually) (QCheckBoxes)
- Radio buttons to select whether to move or copy files (QRadioButton)
- Checkbox to specify whether to overwrite existing files (QCheckBox)
- Checkbox to specify whether to compress files (zip) (QCheckBox)
- Test button (QPushButton)
- Save Rule button (QPushButton)
- Cancel button (QPushButton)

Preferences Window:
- Check rules every (QComboBox with options for seconds, minutes, hours, days, or weeks)
- Enable logging (QCheckBox)
- Empty recycle bin every (QComboBox with options for seconds, minutes, hours, days, or weeks)
- Save Preferences button (QPushButton)
- Cancel button (QPushButton)

Each window is a separate module in the application and is displayed using a QStackedWidget to switch between them.

When the option is chosen to delete a rule, there should be a pop-up asking for confirmation. 

There should be windows minimize, maximize and close buttons in the top right.

Handling data management in my application can be done by using a database to store the settings and rules created by the user. SQLite is a popular choice for small-scale applications like this, as it is lightweight and easy to use.
1. Create a new SQLite database file (with the .db extension) 
2. Define a schema for the database, including tables to store rules and options.
3. Use the PyQt QSql module to connect to the database and execute SQL queries to retrieve, insert, update, and delete data as needed.
4. Implement backup and import functions to allow the user to save and restore their settings and rules to/from a backup file (using JSON).
Based on the requirements for this tool, I have developed a File and Folder Structure:
FileOrganizer/
├── README.md
├── requirements.txt
├── main.py
├── ui/
│ ├── management\_window.ui
│ ├── add\_rule\_window.ui
│ ├── preferences\_window.ui
├── modules/
│ ├── \_\_init\_\_.py
│ ├── management\_window.py
│ ├── add\_rule\_window.py
│ ├── preferences\_window.py
│ ├── rule.py
│ ├── database.py
│ ├── file\_handler.py
│ └── notification.py
└── backups/
 ├── backup.json

README.md: A markdown file that contains information about the application, its features, how to install and use it, and any other important details that the user may need to know.

requirements.txt: A plain text file that lists the required Python packages and their versions that are necessary to run the application.

main.py: The entry point of the application that initializes the UI and event loop.

ui/: A folder containing all the user interface files for each window.

modules/: A folder containing all the modules that make up the application, including the windows and the functionality required to manage the files and folders.

backups/: A folder containing backup files created by the user.

management\_window.py: The module that contains the code for the Management Window.

add\_rule\_window.py: The module that contains the code for the Add Rule Window.

preferences\_window.py: The module that contains the code for the Preferences Window.

rule.py: The module that defines the Rule class used by the application.

database.py: The module that contains the code to connect to the database and execute SQL queries.

file\_handler.py: The module that contains the code to handle file and folder manipulation.

notification.py: The module that contains the code to handle notifications.

This is possible schema model for my SQLite database:

Rules Table
rule\_id (integer, primary key)
rule\_name (text)
source\_folder (text)
destination\_folder (text)
action\_type (text)
overwrite\_existing (boolean)
compress\_files (boolean)
exclude\_readonly (boolean)
exclude\_hidden (boolean)
exclude\_system (boolean)
all\_or\_any (text)
is\_recursive (boolean)
confirm\_action (boolean)
options\_id (integer, foreign key references Options.options\_id)

Conditions Table
condition\_id (integer, primary key)
rule\_id (integer, foreign key references Rules.rule\_id)
attribute (text)
condition\_type (text)
condition\_value (integer)
unit\_of\_time (text)

Options Table
options\_id (integer, primary key)
id (integer, primary key)
check\_interval (integer)
enable\_logging (integer)
empty\_bin\_interval (integer)
enable\_notifications (integer)

Logs Table
log\_id (integer, primary key)
timestamp (datetime)
rule\_id (integer, foreign key references Rules.rule\_id)
source\_path (text)
destination\_path (text)
log\_message (text)

Work Breakdown Structure:
Create basic folder structure
Create database schema
Create module to handle database interactions
Create module to handle file and folder manipulation
Create module to handle notifications
Create Management Window module
Create Add Rule Window module
Create Preferences Window module
Connect database and UI
Test database and UI connectivity
Implement adding, editing, and deleting rules
Implement rule execution based on user-defined criteria
Implement file and folder handling based on user-defined rules
Implement notification functionality
Implement preferences window
Implement backup and import functionality
Test entire application functionality
Refine and polish UI and functionality as needed
Write user manual and documentation
Release application.

Be sure to include each of the windows as separate modules. Provide a list work breakdown structure.
규칙에 따라 파일을 자동으로 정리할 수있는 Windows 용 파이썬으로 나만의 자동화 도구를 만들고 싶습니다. 파일 유형, 날짜 및 크기와 같은 다양한 기준에 따라 파일을 이동, 복사, 삭제 또는 이름 바꾸는 규칙을 만들 수 있습니다. 우선 순위에 따라 이러한 규칙을 구성 할 수 있습니다. 각 규칙에 대해 파일이 이동할 때 Windows 알림을 보낼지 여부를 선택할 수 있습니다.

인터페이스에 PyQt를 사용하고 싶습니다. 내 파일 관리 도구의 인터페이스 디자인:

메인 창:
- 파일 메뉴(일시 중지(토글이 있는 QAction), 설정 가져오기, 설정 내보내기) 및 환경설정 메뉴가 있는 메뉴 표시줄
- 각 규칙을 편집하거나 삭제할 수 있는 옵션이 있는 기존 규칙 목록(QListWidget)(QPushButtons)
- 규칙 추가 버튼(QPushButtons)

규칙 추가 창:
- 규칙 이름(QLineEdit)
- 규칙을 적용할 폴더 선택(파일 대화 상자를 열려면 QPushButtons)
- 규칙 옵션 섹션(제목이 "옵션"인 QGroupBox, 확장/축소 가능)
 - 활성화(QCheckBox)
 - 작업 전 확인(QCheckBox)
 - 재귀적(QCheckBox)
 - 읽기 전용 속성(QCheckBox)
 - 숨겨진 속성 (QCheckBox)
 - 시스템 속성(QCheckBox)
- 규칙 만들기 (QPushButton)
- Act if (옵션 "all" 또는 "any"가 있는 QComboBox)
- 규칙 조건 섹션(제목이 "조건"인 QGroupBox, 확장/축소 가능)
 - 파일 속성을 선택하는 드롭다운(이름, 확장자, 크기, 마지막으로 수정한 날짜, 마지막으로 액세스한 날짜, 만든 날짜 옵션이 있는 QComboBox)
 - 조건을 선택하는 드롭다운(옵션으로 시작, 끝, 일치, 일치하지 않음, 마지막, 마지막에 없음, 마지막에 없음)
 - 초, 분, 시간, 일 또는 주 수를 지정하는 정수 필드(QSpinBox)
 - 옵션 섹션(제목이 "옵션"인 QGroupBox, 확장/축소 가능)
 - 읽기 전용, 숨김 또는 시스템 속성이 있는 파일을 제외하는 옵션(각 속성별로 개별적으로 선택할 수 있음)(QCheckBoxes)
- 파일 이동 또는 복사 여부를 선택하는 라디오 버튼(QRadioButton)
- 기존 파일을 덮어쓸지 여부를 지정하는 확인란(QCheckBox)
- 파일 압축(zip) 여부를 지정하는 확인란(QCheckBox)
- 테스트 버튼(QPushButton)
- 규칙 저장 버튼(QPushButton)
- 취소 버튼(QPushButton)

기본 설정 창:
- 매번 규칙 확인(초, 분, 시간, 일 또는 주에 대한 옵션이 있는 QComboBox)
- 로깅 활성화(QCheckBox)
- 휴지통 매번 비우기(초, 분, 시간, 일 또는 주 옵션이 있는 QComboBox)
- 환경설정 저장 버튼(QPushButton)
- 취소 버튼(QPushButton)

각 창은 애플리케이션에서 별도의 모듈이며 QStackedWidget을 사용하여 창 사이를 전환하여 표시합니다.

규칙 삭제 옵션을 선택하면 확인을 요청하는 팝업이 표시됩니다. 

오른쪽 상단에 창 최소화, 최대화 및 닫기 버튼이 있어야 합니다.

내 애플리케이션에서 데이터 관리를 처리하려면 데이터베이스를 사용하여 사용자가 만든 설정과 규칙을 저장할 수 있습니다. SQLite는 가볍고 사용하기 쉽기 때문에 이와 같은 소규모 애플리케이션에 널리 사용됩니다.
1. 새 SQLite 데이터베이스 파일(.db 확장자)을 만듭니다. 
2. 규칙과 옵션을 저장할 테이블을 포함하여 데이터베이스의 스키마를 정의합니다.
3. PyQt QSql 모듈을 사용하여 데이터베이스에 연결하고 SQL 쿼리를 실행하여 필요에 따라 데이터를 검색, 삽입, 업데이트 및 삭제합니다.
4. 백업 및 가져오기 기능을 구현하여 사용자가 설정 및 규칙을 백업 파일에 저장하고 백업 파일에서 복원할 수 있도록 합니다(JSON 사용).
이 도구에 대한 요구 사항을 기반으로 파일 및 폴더 구조를 개발했습니다:
FileOrganizer/
├── README.md
├── 요구사항.txt
├── main.py
├── ui/
│ ├── 관리\_window.ui
│ ├── add\_rule\_window.ui
│ ├── preferences\_window.ui
├── modules/
│ ├── \_\_init\_\_.py
│ ├── 관리\_window.py
│ ├── add\_rule\_window.py
│ ├── preferences\_window.py
│ ├── rule.py
│ ├── database.py
│ ├── file\_handler.py
│ └── notification.py
└── backups/
 ├── backup.json

README.md: 애플리케이션에 대한 정보, 기능, 설치 및 사용 방법, 사용자가 알아야 할 기타 중요한 세부 정보가 포함된 마크다운 파일입니다.

요구사항.txt: 애플리케이션을 실행하는 데 필요한 필수 Python 패키지와 해당 버전을 나열하는 일반 텍스트 파일입니다.

main.py: UI 및 이벤트 루프를 초기화하는 애플리케이션의 진입점입니다.

ui/: 각 창에 대한 모든 사용자 인터페이스 파일이 들어있는 폴더.

modules/: 창과 파일 및 폴더 관리에 필요한 기능을 포함하여 애플리케이션을 구성하는 모든 모듈이 들어 있는 폴더입니다.

백업/: 사용자가 만든 백업 파일이 들어 있는 폴더입니다.

관리\_window.py: 관리 창에 대한 코드가 포함된 모듈입니다.

add\_rule\_window.py: 규칙 추가 창에 대한 코드가 포함된 모듈입니다.

preferences\_window.py: 기본 설정 창에 대한 코드가 포함된 모듈입니다.

rule.py: 애플리케이션에서 사용하는 규칙 클래스를 정의하는 모듈.

database.py: 데이터베이스에 연결하고 SQL 쿼리를 실행하는 코드가 포함된 모듈입니다.

file\_handler.py: 모듈