<?php

declare(strict_types=1);

namespace Database\Seeders;

use App\Models\LegalDocument;
use App\Models\Tenant;
use Illuminate\Database\Seeder;
use Illuminate\Support\Str;

class DefaultLegalDocumentsSeeder extends Seeder
{
    public function run(): void
    {
        $tenant = Tenant::withoutGlobalScopes()
            ->firstOrCreate(
                ['domain' => 'easybox.w-websoftsrv.kr'],
                [
                    'id' => (string) Str::uuid(),
                    'name' => 'EasyBox Demo',
                    'status' => Tenant::STATUS_ACTIVE,
                    'plan' => Tenant::PLAN_FREE,
                ]
            );

        app()->instance('currentTenant', $tenant);

        $docs = [
            [
                'type' => 'terms_of_service',
                'title' => '서비스 이용약관',
                'content' => $this->termsOfService(),
            ],
            [
                'type' => 'privacy_policy',
                'title' => '개인정보처리방침',
                'content' => $this->privacyPolicy(),
            ],
            [
                'type' => 'license',
                'title' => '소프트웨어 라이선스 (Proprietary)',
                'content' => $this->license(),
            ],
            [
                'type' => 'refund_policy',
                'title' => '환불정책',
                'content' => $this->refundPolicy(),
            ],
            [
                'type' => 'cookie_policy',
                'title' => '쿠키 정책 (Cookie Policy)',
                'content' => $this->cookiePolicy(),
            ],
            [
                'type' => 'community_rules',
                'title' => '커뮤니티 규칙',
                'content' => $this->communityRules(),
            ],
        ];

        foreach ($docs as $d) {
            LegalDocument::withoutGlobalScopes()->updateOrCreate(
                ['tenant_id' => $tenant->id, 'slug' => $d['type'].'-v1-0'],
                [
                    'id' => (string) Str::uuid(),
                    'tenant_id' => $tenant->id,
                    'type' => $d['type'],
                    'version' => '1.0',
                    'title' => $d['title'],
                    'content' => $d['content'],
                    'is_active' => true,
                    'effective_at' => now()->toDateString(),
                    'published_at' => now(),
                ]
            );
        }

        $this->command?->info('Seeded '.count($docs).' legal documents.');
    }

    private function termsOfService(): string
    {
        return <<<'MD'
# 서비스 이용약관

본 약관은 더블유웹소프트 (주) (이하 "회사")가 제공하는 W·Dot CMS / EasyBox 서비스 (이하 "서비스")의 이용에 관한 조건 및 절차, 회사와 회원의 권리·의무 및 책임사항을 규정함을 목적으로 합니다.

## 제1조 (목적)

본 약관은 회사가 운영하는 EasyBox 플랫폼이 제공하는 모든 서비스의 이용에 관한 사항을 규정합니다.

## 제2조 (용어의 정의)

1. "서비스"란 회사가 제공하는 W·Dot CMS, EasyBox 및 관련된 모든 부가 서비스를 의미합니다.
2. "회원"이란 본 약관에 동의하고 회사와 서비스 이용계약을 체결한 자를 말합니다.
3. "콘텐츠"란 회원이 서비스를 이용하면서 생성, 게시, 공유하는 모든 텍스트, 이미지, 동영상, 코드 등을 말합니다.

## 제3조 (약관의 게시 및 효력)

1. 회사는 본 약관을 서비스 초기 화면에 게시합니다.
2. 회사는 관계 법령을 위배하지 않는 범위에서 본 약관을 개정할 수 있으며, 개정 시 시행일 7일 전 (회원에게 불리한 경우 30일 전) 공지합니다.

## 제4조 (서비스의 제공)

1. 회사는 다음과 같은 서비스를 제공합니다.
   - 노코드 웹사이트 빌더 (53 블록 / 5 테마)
   - AI 콘텐츠 생성 도구
   - 멀티테넌트 호스팅
   - 커뮤니티 / 게시판 기능
   - 결제 / 라이선스 관리
2. 회사는 천재지변, 시스템 점검 등의 사유로 서비스 제공을 일시 중단할 수 있습니다.

## 제5조 (회원의 의무)

회원은 다음 행위를 하여서는 안 됩니다.

1. 타인의 정보 도용
2. 회사가 게시한 정보의 무단 변경
3. 외설 또는 폭력적인 콘텐츠 게시
4. 회사의 동의 없는 영리 목적의 서비스 사용

## 제6조 (지적재산권)

1. 회사가 작성한 저작물에 대한 저작권 및 기타 지적재산권은 회사에 귀속됩니다.
2. 회원이 서비스 내에 게시한 콘텐츠의 저작권은 해당 회원에게 귀속됩니다.

## 제7조 (책임의 한계)

1. 회사는 천재지변, 통신장애 등 불가항력적 사유로 서비스를 제공할 수 없는 경우 책임을 면합니다.
2. 회사는 회원이 게시한 콘텐츠의 신뢰성, 정확성에 대한 책임을 지지 않습니다.

## 제8조 (분쟁의 해결)

본 약관과 관련하여 분쟁이 발생한 경우 회사의 본사 소재지를 관할하는 법원을 합의관할로 합니다.

---

**부칙**

본 약관은 2026년 5월 21일부터 시행합니다.
MD;
    }

    private function privacyPolicy(): string
    {
        return <<<'MD'
# 개인정보처리방침

더블유웹소프트 (주) (이하 "회사")는 「개인정보 보호법」 제30조에 따라 정보주체의 개인정보를 보호하고 관련된 고충을 신속하게 처리하기 위하여 다음과 같이 개인정보 처리방침을 수립·공개합니다.

## 1. 개인정보의 처리 목적

회사는 다음의 목적을 위하여 개인정보를 처리합니다.

- 회원 가입 의사 확인, 회원자격 유지·관리
- 서비스 제공에 따른 본인 식별·인증
- 결제·환불·재화 또는 서비스 공급
- 고객 상담·민원처리

## 2. 처리하는 개인정보 항목

| 구분 | 항목 |
|------|------|
| 필수 | 이메일, 비밀번호, 이름 |
| 선택 | 휴대전화번호, 프로필 사진 |
| 자동 수집 | IP 주소, 쿠키, 접속 로그, 기기 정보 |
| 결제 시 | 카드사명, 카드번호 (마스킹), 결제 승인번호 |

## 3. 개인정보의 처리 및 보유기간

- 회원 정보: 회원 탈퇴 시까지
- 전자상거래 관련 기록: 5년 (전자상거래법)
- 결제 기록: 5년 (전자상거래법)
- 로그 기록: 3개월 (통신비밀보호법)

## 4. 개인정보의 제3자 제공

회사는 정보주체의 별도의 동의 없이는 제3자에게 개인정보를 제공하지 않습니다. 단, 다음의 경우는 예외로 합니다.

- 법령에 따라 제공이 요구되는 경우
- 수사기관의 영장에 따라 제공되는 경우

## 5. 개인정보처리의 위탁

| 수탁업체 | 위탁업무 |
|----------|---------|
| AWS | 클라우드 인프라 |
| 토스페이먼츠 | 결제 처리 |
| Mailgun | 이메일 발송 |

## 6. 정보주체의 권리·의무 및 행사 방법

정보주체는 언제든지 다음 권리를 행사할 수 있습니다 (PIPA 제35조~제37조).

1. 개인정보 열람 요구
2. 오류 정정 요구
3. 삭제 요구
4. 처리 정지 요구

권리 행사는 회사에 대해 서면, 전자우편으로 하실 수 있습니다.

## 7. 개인정보의 안전성 확보 조치

- 관리적 조치: 내부관리계획 수립·시행, 정기적 직원 교육
- 기술적 조치: 개인정보처리시스템 접근권한 관리, 암호화 (AES-256), 보안프로그램 설치
- 물리적 조치: 전산실, 자료보관실 접근 통제

## 8. 개인정보 보호책임자

- 책임자: 정원균 (대표)
- 이메일: privacy@w-websoftsrv.kr

## 9. 개인정보 처리방침의 변경

본 방침은 2026년 5월 21일부터 적용됩니다.
MD;
    }

    private function license(): string
    {
        return <<<'MD'
# 소프트웨어 라이선스 약정 (Proprietary)

**W·Dot CMS / EasyBox Proprietary License Agreement (v1.0)**

본 라이선스 약정은 더블유웹소프트 (주) (이하 "라이선서")와 본 소프트웨어를 다운로드, 설치 또는 사용하는 자 (이하 "라이선시") 사이에 체결됩니다.

## 1. 라이선스의 부여

라이선서는 본 약정의 조건에 따라 라이선시에게 W·Dot CMS / EasyBox 소프트웨어 (이하 "소프트웨어")를 사용할 수 있는 비독점적, 비양도성, 취소 가능한 라이선스를 부여합니다.

## 2. 허용되는 사용

라이선시는 다음과 같이 소프트웨어를 사용할 수 있습니다.

- **무료 플랜**: 단일 도메인, 1 테넌트, 1만 PV/월 이하의 비상업적 사용
- **유료 플랜**: 라이선스 요금에 따라 결정 (Pro / Business / Enterprise)

## 3. 금지되는 행위

라이선시는 다음 행위를 할 수 없습니다.

1. 소프트웨어의 소스코드 역공학, 디컴파일, 디스어셈블
2. 라이선서의 사전 서면 동의 없는 재배포 / 재판매
3. 라이선스 키, 인증 모듈의 우회 또는 제거
4. 소프트웨어의 저작권 표시 및 상표 제거
5. 소프트웨어를 무기, 의료기기, 원자력 시설 등 인명 안전에 직결되는 시스템에 사용

## 4. 지적재산권

소프트웨어 및 그 모든 사본의 모든 권리, 소유권, 이익은 라이선서에게 귀속됩니다. 본 약정은 어떠한 지적재산권의 양도도 의미하지 않습니다.

## 5. 보증의 부인

소프트웨어는 "있는 그대로 (AS IS)" 제공되며, 라이선서는 명시적 또는 묵시적인 일체의 보증 (상품성, 특정 목적 적합성, 비침해성 포함) 을 부인합니다.

## 6. 책임의 제한

라이선서는 본 소프트웨어의 사용 또는 사용 불가능으로 인한 어떠한 직접, 간접, 우발적, 결과적 손해에 대해서도 책임을 지지 않습니다. 라이선서의 총 책임은 라이선시가 지불한 라이선스 요금을 초과하지 않습니다.

## 7. 약정의 해지

라이선시가 본 약정의 조항을 위반하는 경우 라이선서는 별도의 통지 없이 본 약정을 해지할 수 있으며, 해지 시 라이선시는 소프트웨어 및 그 사본을 모두 파기하여야 합니다.

## 8. 준거법

본 약정은 대한민국 법령에 따라 해석되며, 분쟁 발생 시 서울중앙지방법원을 합의관할 법원으로 합니다.

---

**오픈소스 컴포넌트**

본 소프트웨어는 다음의 오픈소스 라이브러리를 사용합니다 (각 라이선스는 해당 라이브러리에 귀속).

- Laravel (MIT)
- Vue.js (MIT)
- Astro (MIT)
- TailwindCSS (MIT)

**Copyright © 2026 더블유웹소프트 (주). All rights reserved.**
MD;
    }

    private function refundPolicy(): string
    {
        return <<<'MD'
# 환불 정책

본 환불 정책은 더블유웹소프트 (주) (이하 "회사")가 제공하는 W·Dot CMS / EasyBox 유료 서비스의 환불에 관한 사항을 규정합니다.

## 1. 환불 가능 기간

| 결제 유형 | 환불 가능 기간 | 환불 비율 |
|-----------|---------------|-----------|
| 월 정기 결제 | 결제일로부터 7일 이내 사용량 30% 미만 | 100% |
| 월 정기 결제 | 결제일로부터 7일 이내 사용량 30% 이상 | 미환불 |
| 연간 결제 | 결제일로부터 14일 이내 미사용 | 100% |
| 연간 결제 | 결제일로부터 1개월 이내 사용 | 사용 개월수 차감 후 환불 |
| 단품 (테마/플러그인) | 결제일로부터 7일 이내, 미설치 | 100% |
| 단품 (테마/플러그인) | 설치/다운로드 완료 | 환불 불가 |

## 2. 환불 신청 방법

1. 회사 고객센터 (support@w-websoftsrv.kr) 로 환불 사유와 함께 신청
2. 결제 영수증 또는 주문번호 제공
3. 회사는 영업일 기준 3일 이내에 검토 후 회신

## 3. 환불 처리 기간

- 카드 결제: 카드사 영업일 기준 3~5일
- 계좌 이체: 영업일 기준 2~3일
- 간편 결제: 결제사 정책에 따름 (보통 1~3일)

## 4. 환불 불가 사유

다음의 경우 환불이 불가합니다.

1. 약관에 동의한 후 서비스 이용 약관을 위반한 경우
2. 회원이 서비스를 30% 이상 사용한 경우 (정기 결제)
3. 디지털 콘텐츠 (테마 / 플러그인) 를 다운로드 또는 설치한 경우
4. 회원의 단순 변심 (환불 가능 기간 경과 시)

## 5. 부분 환불

연간 결제 사용 중 환불 시:

```
환불액 = 결제 총액 - (사용 개월 × 월 요금) - 위약금 (10%)
```

## 6. 분쟁 해결

환불 관련 분쟁은 「전자상거래 등에서의 소비자보호에 관한 법률」 및 「공정거래위원회」 표준약관에 따릅니다.

## 7. 문의

- 이메일: support@w-websoftsrv.kr
- 전화: 1588-XXXX (평일 09:00 ~ 18:00)

---

**본 정책은 2026년 5월 21일부터 시행합니다.**
MD;
    }

    private function cookiePolicy(): string
    {
        return <<<'MD'
# 쿠키 정책 (Cookie Policy)

본 쿠키 정책은 더블유웹소프트 (주) (이하 "회사")가 운영하는 EasyBox 서비스에서 사용하는 쿠키 (Cookie) 에 관한 정보를 제공합니다. GDPR 및 ePrivacy Directive 를 준수합니다.

## 1. 쿠키란?

쿠키는 웹사이트가 사용자의 브라우저에 저장하는 작은 텍스트 파일로, 사이트가 사용자의 활동 정보 일부를 기억할 수 있게 합니다.

## 2. 사용 쿠키의 종류

### 2.1 필수 쿠키 (Strictly Necessary)

| 쿠키명 | 목적 | 보유기간 |
|--------|------|---------|
| `wdot_session` | 세션 유지 | 브라우저 종료 시 |
| `wdot_csrf` | CSRF 보호 | 세션 |
| `wdot_token` | 인증 토큰 | 30일 |

이 쿠키는 서비스 기본 기능에 필요하며 비활성화할 수 없습니다.

### 2.2 기능 쿠키 (Functional)

| 쿠키명 | 목적 | 보유기간 |
|--------|------|---------|
| `wdot_lang` | 언어 설정 | 1년 |
| `wdot_theme` | 테마 (라이트/다크) | 1년 |

### 2.3 분석 쿠키 (Analytics)

| 쿠키명 | 목적 | 제공자 | 보유기간 |
|--------|------|-------|---------|
| `_ga` | 사용자 식별 | Google Analytics | 2년 |
| `_gid` | 24시간 사용자 식별 | Google Analytics | 24시간 |

### 2.4 광고 쿠키 (Advertising)

회사는 현재 광고 쿠키를 사용하지 않습니다.

## 3. 쿠키 동의 관리

EU/EEA 지역 사용자는 처음 방문 시 쿠키 동의 배너를 통해 다음을 선택할 수 있습니다.

- **모두 허용**: 모든 쿠키를 허용
- **선택 허용**: 필수 쿠키 외에 원하는 카테고리만 선택
- **모두 거부**: 필수 쿠키만 사용 (서비스 기본 기능에 영향 없음)

## 4. 쿠키 비활성화 방법

- **Chrome**: 설정 → 개인정보 보호 및 보안 → 쿠키 및 기타 사이트 데이터
- **Safari**: 환경설정 → 개인 정보 보호 → 쿠키 및 웹사이트 데이터 관리
- **Firefox**: 설정 → 개인 정보 및 보안 → 쿠키 및 사이트 데이터

쿠키를 차단하시면 일부 서비스가 정상 작동하지 않을 수 있습니다.

## 5. 변경 사항

본 쿠키 정책이 변경되면 변경된 정책을 공지 후 7일 후부터 적용합니다.

## 6. 문의

- 이메일: privacy@w-websoftsrv.kr

---

**본 정책은 2026년 5월 21일부터 시행합니다.**
MD;
    }

    private function communityRules(): string
    {
        return <<<'MD'
# 커뮤니티 규칙

EasyBox 커뮤니티는 모든 사용자가 안전하고 즐겁게 정보를 나누는 공간입니다. 다음 규칙을 함께 지켜주세요.

## 1. 존중과 배려

- 다른 회원을 존중하고 예의를 지킵니다.
- 개인 인신공격, 비방, 욕설, 차별적 발언을 금지합니다.
- 다양한 의견과 경험을 인정합니다.

## 2. 금지되는 게시물

다음과 같은 게시물은 사전 통보 없이 삭제될 수 있습니다.

1. **욕설 / 비방 / 인신공격**
2. **음란물 / 폭력적 콘텐츠**
3. **광고 / 스팸 / 도배** (3회 이상 동일 게시물)
4. **개인정보 노출** (타인의 전화번호, 주소, 주민번호 등)
5. **저작권 침해 콘텐츠** (불법 복제 자료, 무단 전재)
6. **허위 사실 유포 / 가짜 뉴스**
7. **불법 거래** (마약, 무기, 도박 등)
8. **차별적 발언** (인종, 성별, 종교, 성적 지향 등)

## 3. 게시물 작성 가이드

- 게시판 주제에 맞는 글을 작성합니다.
- 제목은 명확하게 작성하고, 본문은 가급적 자세히 작성합니다.
- 검색 후에도 답을 찾지 못했을 때 질문해주세요.
- 코드를 첨부할 때는 코드 블록 (```) 을 사용해주세요.

## 4. 신고 및 처벌

회원은 부적절한 게시물을 발견하면 신고 버튼으로 신고할 수 있습니다.

| 단계 | 처분 |
|------|------|
| 1회 위반 | 경고 + 게시물 삭제 |
| 2회 위반 | 7일 활동 정지 |
| 3회 위반 | 30일 활동 정지 |
| 4회 위반 | 영구 차단 |

심각한 위반 (불법 행위, 음란물 유포 등) 의 경우 1회만으로도 영구 차단될 수 있습니다.

## 5. 운영진의 권한

- 운영진은 본 규칙에 위반되는 게시물을 사전 통보 없이 삭제할 수 있습니다.
- 운영진의 판단은 최종적이며, 이의 제기는 운영진 메일 (community@w-websoftsrv.kr) 로 가능합니다.

## 6. 공익적 콘텐츠 권장

- 다른 회원에게 도움이 되는 정보를 공유해주세요.
- 좋은 게시물에는 추천을 눌러주세요.
- 신규 회원의 질문에 친절하게 답변해주세요.

---

**본 규칙은 2026년 5월 21일부터 시행합니다.**

함께 만들어가는 커뮤니티에 감사드립니다.
MD;
    }
}
