using System.Xml.Serialization;

namespace economy.Models.Whois.Domain
{
    // 검색결과 변수
    [XmlRoot(ElementName = "response")]
    public class Response
    {
        [XmlElement(ElementName = "result")]
        public Result Result { get; set; }

        [XmlElement(ElementName = "whois")]
        public Whois Whois { get; set; }
    }

    public class Result
    {
        // 결과코드
        [XmlElement(ElementName = "result_code")]
        public int ResultCode { get; set; }

        // 결과 메시지
        [XmlElement(ElementName = "result_msg")]
        public string ResultMsg { get; set; }
    }

    public class Whois
    {
        [XmlElement(ElementName = "krdomain")]
        public KrDomain? KrDomain { get; set; }

        [XmlElement(ElementName = "error")]
        public Error? Error { get; set; }
    }

    // 응답 없을 경우, 오류 발생 시
    public class Error
    {
        [XmlElement(ElementName = "query")]
        public string? Query { get; set; }

        [XmlElement(ElementName = "error_code")]
        public int? ErrorCode { get; set; }

        [XmlElement(ElementName = "error_msg")]
        public string? ErrorMsg { get; set; }
    }

    public class KrDomain
    {
        // 조회 요청한 주소
        [XmlElement(ElementName = "name")]
        public string Name { get; set; }

        // 등록인 이름
        [XmlElement(ElementName = "regName")]
        public string RegName { get; set; }

        // 관리자 이름
        [XmlElement(ElementName = "adminName")]
        public string AdminName { get; set; }

        // 관리자 이메일
        [XmlElement(ElementName = "adminEmail")]
        public string AdminEmail { get; set; }

        // 관리자 전화번호
        [XmlElement(ElementName = "adminPhone")]
        public string AdminPhone { get; set; }

        // 최종수정일자
        [XmlElement(ElementName = "lastUpdatedDate")]
        public string LastUpdatedDate { get; set; }

        // 등록일자
        [XmlElement(ElementName = "regDate")]
        public string RegDate { get; set; }

        // 만료일자
        [XmlElement(ElementName = "endDate")]
        public string EndDate { get; set; }

        // 정보공개여부
        [XmlElement(ElementName = "infoYN")]
        public string InfoYN { get; set; } = "N";

        // 도메인 상태
        [XmlElement(ElementName = "domainStatus")]
        public string DomainStatus { get; set; }

        // 등록대행자 이름
        [XmlElement(ElementName = "agency")]
        public string Agency { get; set; }

        // 등록대행자 주소
        [XmlElement(ElementName = "agency_url")]
        public string AgencyUrl { get; set; }

        /**
         * 영문 정보
         **/

        // 도메인 상태
        [XmlElement(ElementName = "e_regName")]
        public string ERegName { get; set; }

        // 도메인 상태
        [XmlElement(ElementName = "e_addr")]
        public string EAddr { get; set; }

        // 도메인 상태
        [XmlElement(ElementName = "e_adminName")]
        public string EAdminName { get; set; }

        // 도메인 상태
        [XmlElement(ElementName = "e_agency")]
        public string EAgency { get; set; }

        /**
         * 네임서버
         **/

        // DNSSEC 적용 여부
        [XmlElement(ElementName = "dnssec")]
        public string? DNSSEC { get; set; }

        [XmlElement(ElementName = "ns1")]
        public List<string> NameServers { get; set; } = new List<string>();

        [XmlElement(ElementName = "ip1")]
        public List<string> IPAddresses { get; set; } = new List<string>();
    }
}
