package kr.co.zioinfo.web.config;

import kr.co.zioinfo.web.model.*;
import kr.co.zioinfo.web.repository.*;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.CommandLineRunner;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;
import java.time.LocalDate;

@Component
@RequiredArgsConstructor
public class DataInitializer implements CommandLineRunner {

    private final NewsRepository newsRepo;
    private final AdminUserRepository adminUserRepo;
    private final RecruitRepository recruitRepo;
    private final CompanyHistoryRepository historyRepo;
    private final FaqRepository faqRepo;
    private final PasswordEncoder passwordEncoder;

    @Override
    public void run(String... args) {
        initAdmin();
        initNews();
        initRecruits();
        initHistory();
        initFaq();
    }

    private void initAdmin() {
        if (adminUserRepo.existsByUsername("admin")) return;
        adminUserRepo.save(AdminUser.builder()
                .username("admin")
                .password(passwordEncoder.encode("Admin@2026!"))
                .displayName("관리자")
                .email("admin@zioinfo.co.kr")
                .enabled(true)
                .build());
    }

    private void initNews() {
        if (newsRepo.count() > 0) return;

        newsRepo.save(News.builder()
            .title("GUARDiA ITSM 2.0 정식 출시 — AI 기반 인프라 자율 운영 플랫폼")
            .category("보도자료")
            .summary("(주)지오정보기술이 공공기관 레거시 인프라 자동화를 위한 GUARDiA ITSM 2.0을 정식 출시했습니다.")
            .content("GUARDiA ITSM 2.0은 메신저 한 줄 명령으로 에이전트리스 SSH/SFTP 배포·운영을 자동화하는 온프레미스 플랫폼입니다.")
            .visible(true).viewCount(128).build());

        newsRepo.save(News.builder()
            .title("2026 공공기관 AI 인프라 혁신 박람회 참가")
            .category("공지사항")
            .summary("지오정보기술이 2026 공공기관 AI 인프라 혁신 박람회에 참가하여 GUARDiA 솔루션을 선보입니다.")
            .content("박람회 기간: 2026년 6월 15일~17일 / 장소: 코엑스 A홀 / 부스: A-215")
            .visible(true).viewCount(87).build());

        newsRepo.save(News.builder()
            .title("행정안전부 공공SW 우수제품 선정")
            .category("보도자료")
            .summary("GUARDiA ITSM이 행정안전부 2026년 공공SW 우수제품으로 선정되었습니다.")
            .content("행정안전부는 공공기관 정보화 사업에 적합한 소프트웨어를 심사하여 우수제품을 선정합니다.")
            .visible(true).viewCount(214).build());

        newsRepo.save(News.builder()
            .title("특허 등록 — 에이전트리스 레거시 인프라 자동화 방법")
            .category("공지사항")
            .summary("에이전트 설치 없이 SSH/SFTP 프로토콜만으로 레거시 WAS를 자동화하는 방법에 대한 특허가 등록되었습니다.")
            .content("특허명: 에이전트리스 레거시 인프라 자동화 시스템 및 방법\n등록번호: 10-2026-XXXXXXX")
            .visible(true).viewCount(41).build());
    }

    private void initRecruits() {
        if (recruitRepo.count() > 0) return;

        recruitRepo.save(Recruit.builder()
            .title("백엔드 개발자 (Java/Spring Boot)")
            .department("개발팀").jobType("정규직")
            .description("- GUARDiA ITSM 백엔드 API 개발\n- 성능 최적화 및 코드 리뷰\n- 공공기관 SI 프로젝트 참여")
            .requirements("- Spring Boot 실무 경력 3년 이상\n- JPA/Hibernate 경험\n- RESTful API 설계 능력")
            .preferred("- 공공기관 프로젝트 경험\n- MSA 아키텍처 이해\n- 보안 코딩 경험")
            .deadline(LocalDate.of(2026, 6, 30)).headcount(2).active(true).build());

        recruitRepo.save(Recruit.builder()
            .title("프론트엔드 개발자 (React)")
            .department("개발팀").jobType("정규직")
            .description("- React SPA 개발 및 유지보수\n- 홈페이지 및 관리자 페이지 개발\n- UI/UX 개선")
            .requirements("- React 실무 경력 2년 이상\n- JavaScript/TypeScript 능숙\n- CSS 레이아웃 및 반응형 웹 경험")
            .preferred("- 공공기관 프로젝트 경험\n- 데이터 시각화 경험 (Chart.js 등)")
            .deadline(LocalDate.of(2026, 6, 30)).headcount(1).active(true).build());

        recruitRepo.save(Recruit.builder()
            .title("인프라 엔지니어 (Linux/DevOps)")
            .department("인프라팀").jobType("정규직")
            .description("- 공공기관 서버 인프라 구축 및 운영\n- CI/CD 파이프라인 관리\n- 보안 취약점 점검")
            .requirements("- Linux 서버 운영 경력 3년 이상\n- Ansible/Terraform 경험\n- 네트워크 기초 지식")
            .preferred("- 공공기관 정보보호 인증 자격증 (정보처리기사 등)\n- Kubernetes 경험")
            .deadline(LocalDate.of(2026, 7, 31)).headcount(1).active(true).build());
    }

    private void initHistory() {
        if (historyRepo.count() > 0) return;

        Object[][] data = {
            {"2026", 0, "GUARDiA ITSM v2.0 출시 — AI ChatOps 오케스트레이션 플랫폼"},
            {"2026", 1, "GS인증 1등급 신청 준비 완료 (TTA 심사 예정)"},
            {"2026", 2, "공공기관 1,000개 이상 멀티테넌트 지원 목표 달성"},
            {"2025", 0, "삼성전자 차세대 CRM 구축 (DB Migration / DA / 튜닝)"},
            {"2025", 1, "GUARDiA ITSM v1.0 베타 서비스 개시"},
            {"2025", 2, "AI 기반 인프라 자동화 특허 출원"},
            {"2024", 0, "DELL 차세대 CRM 구축 — DBA 역할 수행 (엠로)"},
            {"2024", 1, "소상공인컨설팅시스템 구축 (서울신용보증재단, PM)"},
            {"2024", 2, "국민연금 차세대 시스템 구축 (AA)"},
            {"2023", 0, "헌법재판소 포털시스템 구축 (PM)"},
            {"2023", 1, "서울신용보증재단 모바일앱 구축 완료 (PM)"},
            {"2022", 0, "에이텍에이피 통합유지보수관리시스템 개발 (PM)"},
            {"2022", 1, "헌법재판소 통합보안관제시스템 구축 (PM)"},
            {"2020–2021", 0, "현대백화점 HKOS 시스템 개발/구축 (PM)"},
            {"2020–2021", 1, "서울시립대 대학행정정보시스템 성능 개선 (PL)"},
            {"2020–2021", 2, "농협 하나로마트 ESL 시스템 구축 (PM)"},
            {"2018–2019", 0, "이마트 정산시스템 프로젝트 (DA)"},
            {"2018–2019", 1, "우체국금융 스마트ATM 도입 (PMO)"},
            {"2018–2019", 2, "현대백화점 무인POS시스템 구축 (PM)"},
            {"2018–2019", 3, "갤러리아백화점 PDA 정산시스템 (PM)"},
            {"2015–2017", 0, "LG U+ VAN 고도화 — 승인시스템 개발 FEP/AP/BEP (AA)"},
            {"2015–2017", 1, "한화그룹 4사 통합 HR시스템 구축 (PL)"},
            {"2015–2017", 2, "참좋은여행 콜센터 어플리케이션 구축 (PL)"},
            {"2013–2014", 0, "삼성전자 품질관리시스템(QWINGS) 구축 (PM)"},
            {"2013–2014", 1, "대우증권 통합인프라시스템 (DBA)"},
            {"2013–2014", 2, "현대캐피탈 차세대시스템 (PL)"},
            {"2013–2014", 3, "중소기업 1357 통합콜센터 구축 (PL)"},
            {"2010–2012", 0, "삼성전자서비스 eZone 갱신 (PL)"},
            {"2010–2012", 1, "현대모비스 원가관리시스템 (DBA)"},
            {"2010–2012", 2, "한국전기안전공사 전기안전포털시스템 (DBA)"},
            {"2008–2009", 0, "국민은행 차세대 포탈 구축 (PL)"},
            {"2008–2009", 1, "한국원자력연료 인사정보(HMS)시스템 (DBA)"},
            {"2008–2009", 2, "한국전기안전공사 안전점검 고도화 (DBA)"},
            {"2000", 0, "(주)지오정보기술 창립"},
            {"2000", 1, "공공기관 IT 인프라 서비스 개시"},
        };

        for (Object[] row : data) {
            historyRepo.save(CompanyHistory.builder()
                .year((String) row[0])
                .sortOrder((Integer) row[1])
                .content((String) row[2])
                .visible(true)
                .build());
        }
    }

    private void initFaq() {
        if (faqRepo.count() > 0) return;

        Object[][] faqs = {
            {"GUARDiA ITSM", "GUARDiA ITSM은 어떤 제품인가요?",
             "GUARDiA ITSM은 메신저 한 줄 명령으로 1,000개 이상 공공기관의 레거시 IT 인프라를 자동 운영하는 AI 기반 ChatOps 플랫폼입니다. 대상 서버에 별도 소프트웨어 설치 없이 표준 SSH/SFTP 프로토콜만으로 배포·운영·모니터링을 자동화합니다.", 1},
            {"GUARDiA ITSM", "서버에 에이전트를 설치해야 하나요?",
             "아니요. GUARDiA ITSM은 에이전트리스(Agentless) 방식으로 동작합니다. 대상 서버에 어떠한 소프트웨어도 설치할 필요가 없으며, 표준 SSH(22번 포트)만 열려 있으면 즉시 연동 가능합니다.", 2},
            {"GUARDiA ITSM", "클라우드 없이 사용할 수 있나요?",
             "예. GUARDiA ITSM은 완전한 온프레미스(On-premise) 솔루션으로, 외부 클라우드나 인터넷 연결 없이 폐쇄망 환경에서도 100% 동작합니다. AI 엔진(Ollama)도 내부 서버에서 구동됩니다.", 3},
            {"GUARDiA ITSM", "지원되는 운영체제는 무엇인가요?",
             "GUARDiA ITSM 서버: Ubuntu 20.04+, CentOS 7+, RHEL 8+, Windows Server 2019+를 지원합니다. 관리 대상 서버: SSH가 지원되는 모든 Linux/Unix/Windows Server 환경에서 사용 가능합니다.", 4},
            {"도입·계약", "도입 비용은 어떻게 되나요?",
             "기관 규모와 관리 서버 수에 따라 맞춤 견적을 제공합니다. 7일 무료 체험판을 먼저 신청하신 후 문의 주시면 상세한 견적을 안내해 드립니다.", 1},
            {"도입·계약", "체험판을 사용할 수 있나요?",
             "예. 7일 무료 체험판을 제공합니다. 문의하기 또는 GUARDiA 페이지의 '무료 데모 신청' 버튼을 통해 신청하시면 영업일 기준 1일 이내에 안내 드립니다.", 2},
            {"도입·계약", "공공기관 나라장터 조달 구매가 가능한가요?",
             "예. GUARDiA ITSM은 조달청 나라장터 등록을 준비 중이며, 공공기관 입찰을 통한 구매를 지원합니다. 자세한 사항은 영업팀(031-483-1766)에 문의해 주십시오.", 3},
            {"기술 지원", "기술 지원은 어떻게 받을 수 있나요?",
             "이메일(support@zioinfo.co.kr), 전화(031-483-1766), GUARDiA ITSM 내 챗봇을 통해 기술 지원을 제공합니다. 운영 중 긴급 장애는 24시간 온콜 지원이 가능합니다.", 1},
            {"기술 지원", "업그레이드는 어떻게 진행되나요?",
             "정기 업데이트는 연 2~4회 제공되며, 보안 패치는 즉시 제공됩니다. 업그레이드는 GUARDiA 내 자동 배포 기능을 통해 다운타임 없이 진행할 수 있습니다.", 2},
        };

        for (Object[] f : faqs) {
            faqRepo.save(Faq.builder()
                .category((String) f[0])
                .question((String) f[1])
                .answer((String) f[2])
                .orderNum((Integer) f[3])
                .visible(true)
                .build());
        }
    }
}
